我在看AnyEvent::Fork
模块。我有 20 个外部脚本我想并行调用(一次 6 个),并在全部完成后总结它们的输出。我不知道如何实现这一目标。
模块中的示例代码(仅调用 1 个子代码)有问题。我只是在代码中添加了一个简单的睡眠,不会立即返回,并且父进程会立即退出,而无需等待子进程。
open my $output, ">/tmp/log" or die "$!";
AnyEvent::Fork
->new
->eval ('
# compile a helper function for later use
sub run {
my ($fh, $output, @cmd) = @_;
# perl will clear close-on-exec on STDOUT/STDERR
open STDOUT, ">&", $output or die;
open STDERR, ">&", $fh or die;
### Added by me to demonstrate that
### $cv->recv returns immediately.
sleep 5;
exec @cmd;
}
')
->send_fh ($output)
->send_arg ("/bin/echo", "hi")
->run ("run", my $cv = AE::cv);
my $stderr = $cv->recv;
结果是/tmp/log
空的。我不明白condvar
这里是如何使用的,它不在文档中。我可以得到正在运行的孩子的数量condvar
吗?
请帮助如何解决这个问题。
更新这里的主要问题是父母不等待孩子完成。