Dom Jul 13, 2008 6:14 am
|
 |
Zeokat
Perlero Frecuente

|
Registrado: 22 Ago 2006
Mensajes: 117
|
|
| Problema de memoria con forking |
|
|
Bueno tratando de hacerme un sencillo chequeador de URL, escribí el siguiente código.
| Perl: | #!/usr/bin/perl -w
use strict;
use LWP:: UserAgent;
use HTTP:: Request;
use Parallel:: ForkManager;
print "Trabajando...\n";
my $archivo_links = $ARGV[0];
chomp($archivo_links);
open LINKS, "$archivo_links" or die "No se encuentra el archivo.... \n";
my @links = <LINKS>;
close(LINKS );
my $ua = LWP:: UserAgent-> new;
$ua-> agent("Mozilla/4.0 (compatible; MSIE 5.0; Windows 98; DigExt)");
my $timeout = 30;
my $bots = 5;
my $start = 0;
my $pm = new Parallel:: ForkManager($bots);
open CODE, '>>', "links_validos.txt" or die $!;
for (my $i = $start; $i < @links; $i++ ) {
$pm-> start and next;
$ua-> timeout($timeout);
my $req = HTTP:: Request-> new(GET => $links[$i]);
my $response = $ua-> request($req);
my $content = $response-> content();
if ($content =~ /Bienvenido.../ )
{
print $links[$i], " Valido!\n";
print CODE $links[$i], "\n";
}
$pm-> finish;
}
$pm-> wait_all_children;
close(CODE ); |
Es algo sencillo pero funciona casi a la perfección, tiene un pequeño problema y es que poco a poco se va llenando la memoria de mi sistema hasta que se queda casi parado por completo.
Abrí el administrador de tareas de Windows y vi como a medida que se va bajando el código de los diferentes links se va incrementando la memoria consumida hasta que se queda todo medio parado.
La verdad no sé cómo solucionar esto y tampoco sé dónde está el problema, a ver si alguien me puede echar una mano.
Saludos y gracias de antemano. |
|
|
|

Dom Jul 13, 2008 9:27 am
|
 |
Jenda
Perlero Frecuente

|
Registrado: 29 Oct 2007
Mensajes: 105
Ubicación: Praga, Republica Checa
|
|
|
|
Dom Jul 13, 2008 10:12 am
|
 |
Zeokat
Perlero Frecuente

|
Registrado: 22 Ago 2006
Mensajes: 117
|
|
|
|
Dom Jul 13, 2008 12:07 pm
|
 |
explorer
Moderador

|
Registrado: 24 Jul 2005
Mensajes: 4102
Ubicación: Valladolid, España
|
|
|
|
|
Yo creo que el problema es Windows...
Por otra parte, hay un módulo para hacer algo así: HTTP::Client::Parallel. |
|
Dom Jul 13, 2008 4:07 pm
|
 |
Zeokat
Perlero Frecuente

|
Registrado: 22 Ago 2006
Mensajes: 117
|
|
|
|
|
Muy cierto explorer, probé el mismo código en Xubuntu y había 5 procesos de Perl debido al forking consumiendo 1,3 MB de memoria cada uno.
Menudo cambio... ¡¡¡Maldito Windows!!!
Lo malo es que no entiendo cómo usar el client parallel, no adjuntan ningún ejemplo los de CPAN
Saludos. |
|
Powered by phpBB © 2001, 2005 phpBB Group
|