• Publicidad

Timeout

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Timeout

Notapor later » 2011-01-19 06:05 @295

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. $Ninicial = 1;
  2. $Nfinal = 4365;
  3.  
  4. while ($Ninicial <= $Nfinal)
  5. {
  6. my $final = "http://..../index.php?id=".$Ninicial;
  7. my $cnx = LWP::UserAgent->new() or die;
  8. my $go = $cnx->get($final);
  9. if ($go->content =~ m/fecha(.*?)fecha/ms)
  10.         {
  11.                 print $Ninicial.": $1\n";
  12.                 $Ninicial++;
  13.                 }
  14. }
  15.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Hola amigos... Tengo este pequeño script que va muy bien, excepto... cuando se me colapsa y se me queda parado.

Me explico: yo voy recibiendo por consola algo parecido así:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
1: lo que quiero obtener
2: lo que quiero obtener
3: lo que quiero obtener
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Y cuando lleva un rato... al final se acaba quedando pillado en alguno y ya el script no sigue avanzando... Entonces supongo que necesito un timeout a lo mejor de 10 segundos, y si pasa ese tiempo que se repita la operación fallada hasta que la complete y siga avanzando...

Un saludo y gracias a toda la comunidad.
later
Perlero nuevo
Perlero nuevo
 
Mensajes: 46
Registrado: 2007-10-06 12:42 @570

Publicidad

Re: Timeout

Notapor explorer » 2011-01-19 11:47 @532

Yo veo que no estás leyendo de consola, sino que estás haciendo peticiones HTTP.

Y en el bucle, falta por decidir qué debe ocurrir si la petición falla. Según el código actual, si la expresión regular no encuentra el patrón, repite de nuevo todo el bucle while(), y vuelta a empezar.

En mi opinión, deberías: 1) poner un sleep() entre peticiones HTTP, salvo que no te importe cargar al servidor, 2) poner un bucle interno más, por ejemplo un for (0 ..2) { } para que intente varias veces obtener la página. En cuanto lo consiga, haces un last; y sale del bucle. Luego haces la expresión regular. Si está el patrón, lo procesas. Si no está, pues tomas otra decisión, pero que no haga repetir el bucle pues sabes que la petición HTTP ha fallado.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Google [Bot] y 34 invitados