【发布时间】:2011-01-26 14:05:27
【问题描述】:
我有一个使用Parallel::ForkManager 的脚本。然而,即使在所有子进程都完成之后,wait_all_children() 进程也需要非常长的时间。我知道的方法是打印出一些时间戳(见下文)。有谁知道是什么原因造成的(我的机器上有 16 个 CPU 内核)?
my $pm = Parallel::ForkManager->new(16);
for my $i (1..16) {
$pm->start($i) and next;
... do something within the child-process ...
print (scalar localtime), " Process $i completed.\n";
$pm->finish();
}
print (scalar localtime), " Waiting for some child process to finish.\n";
$pm->wait_all_children();
print (scalar localtime), " All processes finished.\n";
显然,我将首先收到Waiting for some child process to finish 消息,其时间戳为7:08:35。然后我会得到Process i completed 消息的列表,最后一个在7:10:30。但是,直到7:16:33(!),我才收到消息All Processes finished。为什么在 7:10:30 和 7:16:33 之间会有 6 分钟的延迟?谢谢!
【问题讨论】:
-
这是您正在运行的代码吗?有一个不那么微妙的语法错误。
标签: perl parallel-processing time-wait