gpt4 book ai didi

rust - 超时后中止 Rust 中的评估

转载 作者:行者123 更新时间:2023-12-03 11:25:02 25 4
gpt4 key购买 nike

我在 Rust 中有一个函数(我没有写过),它要么以毫秒为单位返回,要么在失败前研磨约 10 分钟。

我想将对该函数的调用包装在返回 Option 的东西中。这是 None如果运行时间超过 10 秒,如果运行时间更短,则包含结果。但是,一旦调用该函数,我就无法找到任何方法来中断对该函数的评估。

例如:

// This is the unpredictable function
fn f() {
// Wait randomly for between 0 and 10 seconds
let mut rng = rand::thread_rng();
std::thread::sleep(std::time::Duration::from_secs(rng.gen_range(0, 10)));
}

fn main() {
for _ in 0..100 {
// Run f() here but so that the whole loop takes no more than 100 seconds
// by aborting f() if it takes longer than 1 second
}
}

我发现了一些可以使用带超时的 future 的方法,但我想尽量减少开销,而且我不确定为每次调用这个函数创建一个 future 会有多贵,因为它会被多次调用.

谢谢

最佳答案

异步执行的开销可能很小,特别是因为您的函数至少在几毫秒内运行,这已经很慢了。

像这样的事情会起作用:

use rand::Rng;
use std::time::Duration;
use tokio::time::timeout;

async fn f() -> i32 {
// Wait randomly for between 0 and 10 seconds
let mut rng = rand::thread_rng();
tokio::time::delay_for(Duration::from_secs(rng.gen_range(0, 10))).await;
// return something
1000
}

#[tokio::main]
async fn main() {
for _ in 0..100 {
if let Ok(result) = timeout(Duration::from_secs(1), f()).await {
println!("result = {}", result);
} else {
// took too long
}
}
}

与性能一样,如果您担心一种特定方法可能会很慢,请测试理论而不是假设您是对的。性能特征通常令人惊讶。

关于rust - 超时后中止 Rust 中的评估,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59805874/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com