0

我有很多使用 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<_>>();
4

2 回答 2

2

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

于 2021-03-24T09:01:46.653 回答
0

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

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<_>>();

操场

于 2021-03-24T15:01:51.893 回答