Je possède ce morceau de code que je voudrais paralléliser (pour référence):parallèle :: Forkmanager -> remplir un hachage de hachages de tableaux de l'enfant traite
my (%fastas, %counts);
foreach my $sample (sort keys %AC2)
{
foreach my $chrom (sort keys %{ $AC2{$sample} })
{
foreach my $pos (sort { $a <=> $b } (@{ $allAC2{$chrom} }))
{
my $allele;
#position was genotyped in sample
# or is AC=1, but was also found in AC=2
if(grep(/\b$pos\b/, @{ $AC2{$sample}{$chrom} }) || grep(/\b$pos\b/, @{ $finalAC1{$sample}{$chrom} })) #"\b" is for word boundary -> exact word match
{
$allele = @{ $vcfs{$sample}{$chrom}{$pos} }[2]; #ALT allele
}
#Make sure all SNP positions are in all samples
#Fill with reference genome allele information
else
{
#Fill with reference genome allele information
$allele = substr(@{ $ref{$chrom} }[0], $pos-1, 1); #or die "$sample, $chrom, $pos";
}
push (@{ $fastas{$sample}{$chrom}{$pos} }, $allele);
push (@{ $counts{$chrom}{$pos} }, $allele) unless (grep {$_ eq $allele} @{ $counts{$chrom}{$pos} });
}
}
}
Fondamentalement, les processus enfants ont besoin pour peupler les deux hachages. J'ai cherché et trouvé seulement quelques exemples montrant comment utiliser "run_on_finish" pour retourner la variable des processus fils. Le "problème" est que tous les exemples/tutoriels que j'ai trouvés retournent toujours des scalaires.
Est-il possible de passer un hachage (ou 2 hachages) hors du processus enfant?
Merci, Marco
Les références sont des scalaires. – simbabque
Voir: http://search.cpan.org/~yanick/Parallel-ForkManager-1.19/lib/Parallel/ForkManager.pm#Data_structure_retrieval PFM utilise Storable pour renvoyer les structures au processus parent. Le deuxième exemple montre l'enfant renvoyant des données arbitraires. –
Étant donné que j'ai renvoyé une quantité importante de données, j'ai tendance à privilégier le modèle de type thread (worker) pour cela. Thread :: File d'attente et parallélisme. – Sobrique