Perl Parallel :: Forkmanager不允许收集变量值

Tim*_*Tim 2 parallel-processing perl asynchronous

也许是因为子进程不知道我的哈希(参见下面的代码),哈希%输出没有收集任何东西..除了编写tmp文件之外还有其他方法来收集值吗?

foreach $Item (@AllItems) {
$pid = $pm->start($Item) and next;
$Temp = qx($Item);
$output{$Item}= $Temp; // This doesn't collect anything. :-(
$pm->finish;
}

$pm->wait_all_children;
Run Code Online (Sandbox Code Playgroud)

蒂姆,蒂姆

fri*_*edo 7

分叉进程有自己的父进程内存的副本(好吧,写时复制).在子进程中写入散列不会影响父进程中的散列.

要做你想做的事,你需要使用某种IPC.有关各种可能性的详细讨论,请参阅perlipc联机帮助页.

对于这样的事情,我可能会使用像磁盘上的哈希那样简单的东西.DB_File提供了一个很好的绑定哈希接口.这是你如何做到这一点:

use strict;
use warnings;

use DB_File;

tie my %output, "DB_File", "output.dat" ;

foreach my $item( @AllItems) { 
    my $pid = $pm->start and next;
    $output{$item} = qx($item);
    $pm->finish;
}
Run Code Online (Sandbox Code Playgroud)