繁体   English   中英

如何从子进程中获取值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM