Je cherche à faire un script CGI qui charge 4 pages via HTTP en parallèle.

Voici un code de base simple :

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
74
75
76
77
78
79
80
81
82
83
84
#!/usr/bin/perl -w
 
print "Content-type: text/plain\n\n";
 
# --------------------------------------------------
 
sub main::urlEncode {
    my ($string) = @_;
    $string =~ s/(\W)/"%" . unpack("H2", $1)/ge;
 
    return $string;
}
 
sub main::urlDecode {
    my ($string) = @_;
    $string =~ tr/+/ /;
    $string =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
 
    return $string;
}
 
sub main::getData {
	my $engine = shift;
	my $q = shift;
	my $lang = shift;
 
	$q = urlEncode ($q);	
	my $content = "\"$engine. ceci est un test en $lang => $q\"\n";
	print "Thread : $content";
	return $content;
}
 
# --------------------------------------------------
 
use CGI qw/:standard -debug/;
use threads;
 
# --------------------------------------------------
 
$input = $ENV{QUERY_STRING};
@liste= split(/&/,$input);
foreach (@liste) 
{
	($name,$value)= split(/=/, $_);
 
	if ($name eq 'q')
	{
		$q = $value;
	}
	if ($name eq 'lang')
	{
		$lang = $value;	
	}
 
}
unless ($q)
{
	$q = "test";
}
unless ($lang)
{
	$lang = "fr";	
}
 
# --------------------------------------------------
 
$thr1 = threads->new(\&getData, "1", $q, $lang) or die "\"erreur\"\n";;
$thr2 = threads->new(\&getData, "2", $q, $lang) or die "\"erreur\"\n";
$thr3 = threads->new(\&getData, "3", $q, $lang) or die "\"erreur\"\n";
 
$data1 = $thr1->join;
$data2 = $thr2->join;
#$data3 = $thr3->join;
 
print "Data 1 : ";
print $data1;
print "Data 2 : ";
print $data2;
print "Data 3 : ";
print $data3;
 
# --------------------------------------------------
 
print "\nFin !";
Mon problème vient du fait qu'au delà de deux threads, le script bloque sur cette instruction : $data3 = $thr3->join;

Des idées pour en sortir (je suis hébergé chez Lost Oasis) ?

Merci !