1

对不起我的英语不好...

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

例子:

$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 代替....

4

2 回答 2

1

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

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

于 2013-05-26T23:13:03.650 回答
0

谢谢你们的时间。我做了一些更多的调试,我找到了解决方案。

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

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

谢谢你。

于 2013-05-28T19:26:37.567 回答