gpt4 book ai didi

linux - Perl fork manager 在完成 fork 后获取输出变量

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:28 24 4
gpt4 key购买 nike

我对 Perl Parallel Fork 管理器非常陌生。这是代码,

    my $max_procs = 3;
my $forking = Parallel::ForkManager->new($max_procs);

my @collect_processed_data;
foreach my $row (@data_array) {

$forking->start and next;

# Code processing -- Started

push(@collect_processed_data, $obtained_data);

# where $obtained_data is an array which we get it from DB.

# Code Processing -- Ended.

#print Dumper @collect_processed_data; --> Works here.

$forking->finish; # do the exit in the child process

}

$forking->wait_all_children;

print Dumper @collect_processed_data; --> But not working here;

这就是问题所在, fork 在这里工作得很好。但问题是我无法收集 foreach 循环外部的数据。但同时,我能够在“$forking->finish”之前收集

我需要对“$forking->finish;”做些什么吗?

如有任何帮助,我们将不胜感激。

最佳答案

$pm->start$pm->finish 之间的所有内容都在父级的 fork 中执行。您将添加到子级的 @collect_processed_data 副本,但打印父级的 @collect_processed_data

P::FM 提供了一种将数据返回给父级的机制,该机制记录在标题“RETRIEVING DATASTRUCTURES from child processes”下。

my $pm = Parallel::ForkManager->new($max_procs);

my @collect_processed_data;
$pm->run_on_finish(sub {
my ($pid, $exit_code, $ident, $exit_signal, $core_dump, $processed_data) = @_;

if ($exit_signal) { warn("$pid killed by signal $exit_signal\n"); }
elsif ($exit_code) { warn("$pid exited with error $exit_code\n"); }

push @collect_processed_data, $processed_data
if defined($processed_data);
});

for (...) {
$pm->start and next;
...
my $processed_data = ...;
...
$pm->finish(0, $processed_data);
}

关于linux - Perl fork manager 在完成 fork 后获取输出变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38981252/

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