Windows 为什么';这个分叉环不能像预期的那样工作吗?
为什么会出现以下代码:Windows 为什么';这个分叉环不能像预期的那样工作吗?,windows,perl,multiprocessing,fork,activestate,Windows,Perl,Multiprocessing,Fork,Activestate,为什么会出现以下代码: #!/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: m
#!/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中的多处理:
此方法不执行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
从:
此方法不执行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
my$pid=$pm->开始和下一步 如果两个参数都为真,“and”逻辑将计算为真。如果第一个参数为false,则“and”逻辑将显示快捷方式,并且不会计算第二个参数
您可能需要使用“或”逻辑来代替。my$pid=$pm->start and next 如果两个参数都为真,“and”逻辑将计算为真。如果第一个参数为false,则“and”逻辑将显示快捷方式,并且不会计算第二个参数
您可能需要使用“或”逻辑。我在Windows上,我使用的是
#/usr/bin/perl
。刚刚注意到……我在Windows上,我使用的是#/usr/bin/perl
。刚刚注意到……这个片段来自。我的理解是,$pm->start and next
将为父级执行next
(自ppid!-0起),即自$pm->start and next起,继续为子级执行分叉和打印代码>将计算为false
,因为$pm->start
的pid将为0@Cratylus这正是它所做的!但是,由于start
在您分配给$pid
的子项中返回零,因此每个子项都会打印Hello 0
。您希望使用$
来获取子对象中的PID。此代码段来自。我的理解是,$pm->start and next
将为父级执行next
(自ppid!-0起),即自$pm->start and next起,继续为子级执行分叉和打印代码>将计算为false
,因为$pm->start
的pid将为0@Cratylus这正是它所做的!但是,由于start
在您分配给$pid
的子项中返回零,因此每个子项都会打印Hello 0
。您希望使用$$
来获取子项中的PID。开始和下一步是正确的约定,正如Parallel::ForkManager文档中所使用的那样。@AKHolland,是的corect。但该文档假定程序希望在子进程中执行某些操作。但在这种情况下,它希望在父进程中执行某些操作(打印子pid)。start和next
是正确的约定,正如Parallel::ForkManager文档中所使用的那样。@AKHolland,是的corect。但该文档假定程序希望在子进程中执行某些操作。但在本例中,它希望在父进程中执行某些操作(打印子pid)。