generation xml multi processus
Bonjour,
je cherche à generer un document xml.
j'utilise n processus.
Le processus pere est en charge de generer le xml, les processus fils sont en charge de recuperer les infos sur des bases distantes et de les transferer au pere via un pipe.
Mon probleme : le pere recoit les infos des fils un peu n'importe comment, tout se melange. donc mon xml est mal formé.
Avez vous une solution pour ordonner tout ca ?
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
| sub genXmlInfoHotel{
my @listeHotel = @_;
my $pipeFils_Pere = new IO::Pipe;
my $isPere=0;
my $nbHotels = scalar(@listeHotel);
#Creation des "nbProcessus" Processus
for (my $indice=0;$indice<$nbProcessus;$indice++){
$isPere = fork ();
#Les process fils recup les infos de l'hotel
if (! ($isPere)){
$pipeFils_Pere->writer();
#Pour chaques hotels attribués a ce process
for(my $j=$nbHotels*(($indice/$nbProcessus)-(1/$nbProcessus));$j<$nbHotels*($indice/$nbProcessus);$j++){
$hotelId = $listeHotel[$j][0];
$hotelNom = $listeHotel[$j][1];
$dispo = "";
$enLigne = "";
my $dateOuv = "";
if ($hotelId > 0){
isOnLine();
print "fils $indice :: hotel : $hotelId :++: online : $enLigne \n";
getDateOuverture();
getDispo();
$str = "<hotel id=\"".$hotelId."\" nom=\"".$hotelNom."\"><nbChDispo>".$dispo."</nbChDispo><ouverture>".$dateOuv."</ouverture><enLigne>".$enLigne."</enLigne></hotel> \n";
print $pipeFils_Pere $str;
}
}
print "fin fils $indice \n";
}
}
# Le process pere cré le fichier xml et recup par pipe les infos des fils
if ($isPere){
my $nbFilsMorts = 0;
$pipeFils_Pere->reader();
my $fh = new FileHandle "> $locationXmlFile";
if (!defined $fh){
print "Erreur : PB de creation du fichier XML";
}
print $fh "<?xml version=\"1.0\" encoding=\"ISO-8859-1\"?> \n";
print $fh "<listesHotels> \n";
while(<$pipeFils_Pere>) {
$fluxXml = "$_";
print $fh "$fluxXml";
}
print $fh "</listesHotels> \n";
$fh->close;
print "fin pere\n";
}
} |
là j'y comprens plus rien
:oops: bon, j'avoue, je suis loing d'etre un dieu en Perl.
si je fais un tableau de pipe
Code:
1 2
| $pipeFils_Pere = new IO::Pipe;
$tableauxPipe[$indice]=$pipeFils_Pere; |
, syntaxiquement comment je fais pour ecrire un appel à une methode d'un des pipe ?
Code:
$tableauxPipe[$indice]->writer();
et comment je récup la ref sur le pipe pour ecrire dedant
Code:
print $tableauxPipe[$indice] $str;
:aie: