Как сделать 25 запросов одновременно с HTTP :: Async в Perl?
Я делаю много HTTP-запросов и выбрал HTTP :: Async для этой работы. Я делаю более 1000 запросов и, если я просто сделаю следующее (см. Код ниже), у многих запросов истечет время до их обработки, потому что может пройти десятки минут, прежде чем обработка попадет к ним:
for my $url (@urls) {
$async->add(HTTP::Request->new(GET => $url));
}
while (my $resp = $async->wait_for_next_response) {
# use $resp
}
Поэтому я решил делать 25 запросов за раз, но я не могу придумать способ выразить это в коде.
Я попробовал следующее:
while (1) {
L25:
for (1..25) {
my $url = shift @urls;
if (!defined($url)) {
last L25;
}
$async->add(HTTP::Request->new(GET => $url));
}
while (my $resp = $async->wait_for_next_response) {
# use $resp
}
}
Это, однако, не работает хорошо, потому что это слишком медленно в настоящее время. Теперь он ждет, пока все 25 запросов не будут обработаны, пока не добавит еще 25. Поэтому, если у него осталось 2 запроса, он ничего не делает. Я ожидаю обработки всех запросов на добавление следующей партии из 25.
Как я мог улучшить эту логику, чтобы сделать$async
сделайте что-нибудь, пока я обрабатываю записи, но также убедитесь, что они не истекают.