【发布时间】:2016-10-31 15:05:52
【问题描述】:
我有这段代码想要并行化(供参考):
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} } );
}
}
}
基本上,子进程需要填充两个哈希值。我已经搜索并只找到了几个示例,展示了如何使用“run_on_finish”从子进程返回变量。 “问题”是我发现的所有示例/教程总是返回标量。
是否可以从子进程中传递一个(或 2 个)哈希值?
谢谢, 马可
【问题讨论】:
-
引用是标量。
-
参见:search.cpan.org/~yanick/Parallel-ForkManager-1.19/lib/Parallel/… PFM 使用 Storable 将结构传递回父进程。第二个例子展示了孩子发回任意数据。
-
鉴于传回大量数据,我倾向于为此使用(工作)线程类型模型。 Thread::Queue 和并行性。
-
@Sobrique,我正在使用的 VCF 文件(我的脚本输入)并没有那么大(细菌基因组)。但我会尽量记住这一点。
-
@Ben Grimm,该链接很有帮助。那里有一个哈希的引用。摆弄了几天的 FM 并回顾了这些示例,现在它们都变得更有意义了。
标签: perl parallel-processing parent-child hash-of-hashes