1 pièce(s) jointe(s)
AnyEvent::HTTP - crash PERL
Bonjour,
J'ai plus de 400 pages HTML à parser, mon but est de paralléliser le traitement car j'utiliserai ce script dans une page web plus tard...
Pour cela j'ai trouvé un code qui utilise anyevent, ça fonctionne très bien si le nombre d'url en entrée n'est pas trop important, mais dans mon cas perl se plante avant d'arriver à la fin de la liste.
Pièce jointe 317391
J'ai essayé de "découper" l’exécution de mon programme avec un "while", perl plante de la même manière.
S'agit il d'une saturation mémoire ? Comment y remédier ?
Précisions :
Je travail sur un serveur windows 2012 R2, avec perl v5.24.1.
Voici le code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73
|
use strict;
use warnings;
use AnyEvent;
use AnyEvent::HTTP;
open( FIC, "url.txt");
my @urls = <FIC>;
close (FIC);
open( FIC2, ">result.txt")|| die("Probleme ouverture Fichier en entrée !");
print (FIC2 "Nombre totales d'urls \$#urls : $#urls\n");
my $cv = AnyEvent->condvar; #initialisation anyevent
my $GenCount = 1;
my $count = 0; #initialisation compteur anti goulet d'étranglement
my $max = 50;
for (1 .. $max) {
send_url();
}
print (FIC2 "Before the event-loop\n");
print "Before the event-loop\n";
$cv->recv;
print (FIC2 "Finish\n");
print "Finish\n";
close (FIC2);
###########################Fonction########################################
sub send_url {
return if $count >= $max;
my $url = shift @urls;
return if not $url;
chomp $url;
$count++;
print (FIC2 "Start ($count) $url\n");
print "Start ($count) $url\n";
$cv->begin;
#http_get $url, sub {
http_request GET => $url, sub {
my ($body, $hdr) = @_;
#print Dumper @_;
#print "$body\n";
print (FIC2 "$count - $hdr->{URL}\n");
print "$hdr->{URL}\n";
my $rc=$hdr->{Status};
print "Code retour : $rc\n";
if ($body =~ /appliok|appliko/i ) { print "Pattern : $&\n"; print (FIC2 "Pattern : $&\n");} else {print "Pattern : NULL\n"; print (FIC2 "Pattern : NULL\n");}
if ($body =~ /(serveur : )(\w+)/i ) { print "Serveur : $2\n"; print (FIC2 "Serveur : $2\n");} else {print "Serveur : NULL\n"; print (FIC2 "Serveur : NULL\n");}
#print "$hdr->{date}\n";
#print "$hdr->{Reason}\n";
#print "$url received, Size: Status $html\n";
print (FIC2 "#############$GenCount##############\n");
print "#############$GenCount##############\n";
$cv->end;
$count--;
$GenCount ++;
send_url();
};
return 1;
}; |
Merci pour votre aide.