【发布时间】:2013-06-07 08:23:42
【问题描述】:
我正在使用 forkmanager 同时而不是按顺序运行任务。我已将我的实际代码转换为以下代表我的代码逻辑的示例代码。
#!/usr/bin/perl -w
use strict;
use Data::Dumper;
use Parallel::ForkManager;
my @array2d = () ;
my $dim1Items = 4;
my $dim2Items = 3;
my $dim1Manager = Parallel::ForkManager->new($dim1Items);
for (my $i = 0; $i <= $dim1Items ; $i++) {
$dim1Manager->start and next;
my $dim2Manager = Parallel::ForkManager->new($dim2Items);
for (my $j = 0; $j <= $dim2Items; $j++) {
$dim2Manager->start and next;
$array2d[$i][$j] = "$i\t$j" ;
$dim2Manager->finish;
}
$dim2Manager->wait_all_children;
$dim1Manager->finish;
}
$dim1Manager->wait_all_children;
print Dumper(@array2D) ;
然后我运行 Dumper(@2dArray) 来查看内容,但我得到的是空字符串,这意味着数组是空的。我在没有分叉的情况下尝试了我的值赋值语法并且它有效 - 所以我在分叉时一定做错了什么。
【问题讨论】:
-
顺便说一句,您不应该将数组或哈希传递给
Dumper。改为传递对它们的引用:Dumper(\@array2D) -
只是因为它更漂亮
-
在我看来也像你的 for 循环中的一个错误;如果你从 0 到 $dim1Items 循环,那就是 $dim1Items+1 个总条目。