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)
蒂姆,蒂姆
分叉进程有自己的父进程内存的副本(好吧,写时复制).在子进程中写入散列不会影响父进程中的散列.
要做你想做的事,你需要使用某种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)
| 归档时间: |
|
| 查看次数: |
2434 次 |
| 最近记录: |