gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 06:44:08 25 4
gpt4 key购买 nike

可能是因为子进程不知道我的散列(见下面的代码),散列 %output 没有收集任何东西..除了写一个 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;

TIA,蒂姆

最佳答案

fork 进程有自己的父进程内存副本(好吧,写时副本)。写入子进程中的散列不会影响父进程中的散列。

要执行您想要的操作,您需要使用某种 IPC。查看perlipc用于对各种可能性进行冗长讨论的联机帮助页。

对于这样的事情,我可能会使用一些简单的东西,比如磁盘上的哈希。 DB_File提供了一个很好的绑定(bind)哈希接口(interface)。以下是您可能会怎么做:

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;
}

关于Perl Parallel::Forkmanager 不允许收集变量值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3090531/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com