1

为什么下面的代码:

#!/usr/bin/perl
use strict;
use warnings;
use Parallel::ForkManager;  

my $pm = new Parallel::ForkManager(5);

my @all_data = ('a','b','c','d','e','f');

foreach my $data (@all_data) {
    # Forks and returns the pid for the child:
    my $pid = $pm->start and next; 
    print "Hello $pid\n";
    $pm->finish; # Terminates the child process
}
$pm->wait_all_children;  

打印:

Hello 0  
Hello 0  
Hello 0  
Hello 0  
Hello 0  

我是 Perl 的新手,我正在努力赶上 Perl 中的多处理

4

2 回答 2

2

方法的文档start

此方法执行分叉。它为父进程返回子进程的pid,为子进程返回0。

碰巧,该fork功能也是如此,这就是start镜像它的原因。

$$父母可能需要孩子 PID 来控制孩子——发送信号和东西——但孩子通过变量知道自己的 PID :

foreach my $data (@all_data) {
    $pm->start and next; 
    print "Hello $$\n";
    $pm->finish;
}

示例输出:

Hello 22215
Hello 22218
Hello 22219
Hello 22217
Hello 22220
Hello 22216
于 2013-08-28T23:04:49.217 回答
-1

我的 $pid = $pm->start 和 next;

如果两个参数都为真,“and”逻辑将评估为真。如果第一个参数是假的,那么“与”逻辑将简化并且不会评估第二个参数

您可能想要使用“或”逻辑来代替。

于 2013-08-29T11:59:30.660 回答