微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何并行执行阻塞http请求的映射?

我有很多将 ureq 用于 http 请求的代码,我想知道是否可以避免使用其他 http 库。

我有一个 url 列表,我正在对它们调用 ureq::get。我想知道我是否可以以某种方式并行进行这些调用。我将如何创建单独的线程并并行执行这些线程?

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

解决方法

你可以只use rayon。这不是理想,因为它假定工作受 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<_>>();

Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。