为什么以下代码:
#!/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中的多处理
答案 0 :(得分:2)
此方法执行fork。它返回父进程的子进程的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
答案 1 :(得分:-1)
my $ pid = $ pm-> start and next;
如果两个参数都为真,则“和”逻辑将评估为true。如果第一个参数为false,则“and”逻辑将快捷方式,不会评估第二个参数
您可能希望使用“或”逻辑。