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.

Nom : ScreenShot093.jpg
Affichages : 283
Taille : 42,2 Ko

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 : Sélectionner tout - Visualiser dans une fenêtre à part
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.