Как сделать 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 сделайте что-нибудь, пока я обрабатываю записи, но также убедитесь, что они не истекают.

Ответы на вопрос(2)

Ваш ответ на вопрос