Estoy haciendo un montón de solicitudes HTTP y elegí HTTP :: Async para hacer el trabajo. Tengo más de 1000 solicitudes, y si simplemente hago lo siguiente (consulte el código a continuación), muchas solicitudes aguardan el tiempo de espera antes de que se procesen, ya que pueden pasar decenas de minutos antes de que el procesamiento llegue a ellas:¿Cómo realizo 25 solicitudes a la vez con HTTP :: Async en Perl?
for my $url (@urls) {
$async->add(HTTP::Request->new(GET => $url));
}
while (my $resp = $async->wait_for_next_response) {
# use $resp
}
Así que decidí hacer 25 solicitudes por vez, pero no puedo pensar en una forma de expresarlo en el código.
He intentado lo siguiente:
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
}
}
Sin embargo, esto no funciona así como porque es demasiado lento ahora. Ahora espera hasta que las 25 solicitudes hayan sido procesadas hasta que agregue otra 25. Entonces, si le quedan 2 solicitudes, no hace nada. Tengo que esperar a que se procesen todas las solicitudes para agregar el siguiente lote de 25.
Cómo podría mejorar esta lógica para hacer que $async
haga algo mientras proceso los registros, pero también me aseguro de que no se excedan.
Hola Ikegami, trato de que ejecutar código de ejemplo pero desafortunadamente recibir el mensaje siguiente: 400 No se puede localizar método de objeto "esquema" a través de paquete "URI :: http - esto es cuestión Sheme URI pero yo uso el right URI "http://www.web.de". Puede encontrar mi código fuente en http://www.sourcepod.com/pqyyxw07-51950. thx – ovntatar
lo siento, stackoverflow formateando mi enlace. El enlace es: http: // www .web. de -> borrar espacio char – ovntatar
pero puedo usar cualquier otra URL y recibo el mismo error. Por ejemplo, http: // google. com – ovntatar