• Publicidad

Conexiones simultaneas múltiples con módulo LWP

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

Notapor kidd » 2007-07-30 20:02 @876

Hice unas pequeñas modificaciones al código del ejemplo que te mostró explorer y creo que es mucho más sencillo y cumple con tus necesidades:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!/usr/bin/perl -w

use strict;
use LWP::Simple;
use threads;
use threads::shared;


my @urls = (
            "http://baboonsoftware.com/",
            "http://google.com",
            "http://yahoo.com",
            "http://perl.com"
           );

my @threads;
my $i;

for($i=0; $i<scalar(@urls); $i++){
    $threads[$i] = threads->new(
          \&downloadURL,
          $urls[$i],
          "codigo_reviews" . $i . ".txt"
        );
}


#Verificamos que todo haya descargado
for ($i=0; $i < scalar(@threads); $i++) {
    my $result = $threads[$i]->join();

    if( !$result ){
        print "Error de descarga en $urls[$i]\n";
    }
    else{
        print "$urls[$i]: DESCARGADO\n";
    }
}

exit(1);


sub downloadURL{

   my $url = shift;
   my $file = shift;

   print "Descargando $url\n";

   my $content = get($url);

   open my $FILE, '>', $file or return(0);
   print {$FILE} $content;
   close $FILE;

   return (1);

}
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Podrías aún hacerle algunas modificaciones al código, por ejemplo, la función downloadURL() regresa un valor de 0 si hubo error al descargar el url, o 1 si todo salió bien. Como estoy usando el LWP::Simple, no compruebo que se haya tomado la página correctamente, ahí podrías usar el HTTP::Request por ejemplo, para comprobar que realmente pudiste tomar la página antes de escribir el archivo.

El script hace un archivo con cada página tomada, esto también lo puedes modificar, quizá podrías al final pegar todos los archivos en uno solo como querías.

En fin, creo que es muy práctico el código, y como dices, hace un thread smultaneo por cada url.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Publicidad

Anterior

Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados