[英]How can I get a value from a child process?
我有一个脚本,在某些方面我分叉一些进程来完成一个任务,主进程等待所有孩子完成。
到目前为止一切都好。
问题:我有兴趣获得每个子进程在处理它必须做的事情时花费的最长时间。
我现在所做的只是查看日志,其中我打印了子进程所执行的每个操作所花费的时间,并尝试或多或少地计算出时间。
我知道从子进程中获取某些东西的唯一方法是通过某种共享内存,但我想知道这个特定问题是否有“准备好”/简单的解决方案?
我的意思是为了让时间回归,父进程在一个地方以漂亮的方式打印它们。
我认为可能有一个更好的方法,而不仅仅是检查整个日志....
根据评论更新:
我对儿童过程的时间不感兴趣,即哪个孩子花了最多的时间来完成。 每个子进程都在处理X任务。 每个任务都需要在更糟糕的情况下完成Y秒。 我希望找到Y即子进程完成其中一个X任务所花费的最多时间
fork()
的最大限制是它不像threads
那样容易地做IPC。 除了在进程启动和退出时捕获,否则您正在执行的操作包含perl文档的整个部分。
我建议的是你可能想要的是一根pipe
并将它连接到孩子身上。
像这样的东西(尚未测试,我在Windows的盒子上!)
use strict;
use warnings;
use Parallel::ForkManager;
my $manager = Parallel::ForkManager -> new ( 5 ) ;
pipe ( my $read_handle, my $write_handle );
for ( 1..10 ) {
$manager -> start and next;
close ( $read_handle );
print {$write_handle} "$$ - child says hello!\n";
$manager -> finish;
}
close ( $write_handle );
while ( <$read_handle> ) { print; }
$manager -> wait_all_children();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.