如何并行执行阻止http请求的映射



我有很多代码使用ureq处理http请求,我想知道是否可以避免使用另一个http库。

我有一个url列表,我正在调用ureq::获取它们。我想知道我是否可以同时拨打这些电话。如何创建单独的线程并并行执行这些线程?

let v = vec!["www.qwe.com"; 3];
let responses = v.into_iter().map(|s| make_get_request(s)).collect::<Vec<_>>();

你可以只用人造丝。这不是理想的,因为它假设CPU绑定工作,因此默认情况下每个(逻辑(核心会生成一个线程,这可能比HTTP请求所需的要少,但您可以始终自定义全局线程池(或在线程数更高的本地线程池范围内运行工作(。

如果你想要和请求一样多的线程,你可以生成它们:

let v = vec!["www.qwe.com"; 3];
let handles = v
.into_iter()
.map(|s| thread::spawn(move || make_get_request(s)))
.collect::<Vec<_>>();
let responses = handles.into_iter().map(|h| h.join()).collect::<Vec<_>>();

游乐场

最新更新