Parallel :: ForkManager不希望在MAX之后生成新的子节点

时间:2013-05-26 15:57:49

标签: perl parallel-processing fork

抱歉我的英文......

好的,问题。 我正在使用Parallel :: ForkManager来限制PERL脚本中的fork进程。

示例:

$pm = Parallel::ForkManager->new(3);

[...]
while ($new_client = $httpdaemon->accept())
{
    $pm->start and next;

    # do smth with request in here

    $pm->finish;
}

我看到孩子们正在分叉,他们结束了 - 但在这种情况下我无法处理比MAX - 3更多的请求。

第4次请求(在前3之后),脚本不想生成新的孩子(它挂起)

? Parallel :: ForkManager-> new(3) - 这意味着 - MAX 3同时,对吧?

你知道 - 我想同时处理3个远程客户端,并在完成后 - 与其他3个客户端一样。

如果我找不到任何解决方案,我会改用Proc :: Queue ....

2 个答案:

答案 0 :(得分:1)

  

第4次请求(在前3之后),脚本不想生成新的孩子(它挂起)

是的,它会挂起,直到最初的三个完成之一,之后第四个将开始。这正是你想要的。

答案 1 :(得分:0)

感谢您的时间。 我做了一些调试,我找到了解决方案。

问题在于:         $ SIG {CHLD} ='IGNORE';

在剧本的前面。 如果这个SIG设置为IGNORE PM,那就吓坏了。

谢谢。