Sto facendo un sacco di richieste HTTP e ho scelto HTTP :: Async per fare il lavoro. Ho più di 1000 richieste da fare, e se faccio semplicemente quanto segue (vedi codice sotto), un sacco di richieste scadono nel momento in cui vengono elaborate perché possono impiegare decine di minuti prima che l'elaborazione arrivi a loro:Come posso fare 25 richieste alla volta con HTTP :: Async in Perl?
for my $url (@urls) {
$async->add(HTTP::Request->new(GET => $url));
}
while (my $resp = $async->wait_for_next_response) {
# use $resp
}
Così ho deciso di fare 25 richieste per volta, ma non riesco a pensare a un modo per esprimerlo in codice.
ho provato la seguente:
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
}
}
Questo però non funzionare bene come perché è troppo lento ora. Ora attende che tutte e 25 le richieste siano state elaborate fino a quando ne aggiunge altre 25. Quindi, se rimangono 2 richieste, non fa nulla. Devo aspettare che tutte le richieste siano elaborate per aggiungere il prossimo lotto di 25.
Come potrei migliorare questa logica per fare $async
qualcosa mentre elaboro i record, ma anche assicurarmi che non scadano.
Ciao Ikegami, provo a fare funzionare voi il codice di esempio, ma purtroppo ho ricevuto un messaggio di follow: 400 non può individuare il metodo oggetto "schema" tramite pacchetto "URI :: http - questo è URI problema sheme ma io uso la URI destro "http://www.web.de" è possibile trovare il mio codice sorgente in http://www.sourcepod.com/pqyyxw07-51950. thx – ovntatar
scusate, stackoverflow formattando il mio link.il link è: http: // www. web. de -> cancella lo spazio char – ovntatar
ma comunque posso usare qualsiasi altro URL e ricevo lo stesso errore. eg http: // google. com – ovntatar