#rust #ureq
Вопрос:
У меня много кода, использующего 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<_>>();
Ответ №1:
Вы можете просто использовать вискозу. Это не идеально , потому что это предполагает ЦП и, следовательно, нерест один поток на (логических) ядра по умолчанию, который может быть меньше, чем вы хотели бы, чтобы HTTP-запросы, но вы всегда может настроить глобальный пул потоков (или выполнять работы внутри рамки локального пула потоков с более высоким нитей).
Комментарии:
1. Является ли настройка количества нитей особенностью вискозы или это делается как-то иначе?
2. Это особенность района, проверьте threadpoolbuilder.
Ответ №2:
Если вам нужно столько потоков, сколько запросов, вы можете просто создать их:
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<_>>();