gpt4 book ai didi

multithreading - Perl MCE 将哈希数据返回给主进程

转载 作者:行者123 更新时间:2023-12-01 05:06:41 26 4
gpt4 key购买 nike

我正在尝试运行运行良好的 Perl 多核引擎。但是,当工作人员将数据添加到子例程中的全局散列时,一旦 MCE 过程完成,这些数据就会丢失(请参阅下面评论的位置)。我不认为这会成为问题,因为 %data 是全局性的。任何建议非常感谢。

#!/usr/bin/perl
use strict;
use warnings;
use MCE;

my @symbol = ('abc','def');
my $CPUs = 1;
my %data = ();

process();

sub process {
my $mce = MCE->new(
input_data => \@symbol,
max_workers => $CPUs,
user_func => sub {
my ($self, $sym, $chunk_id) = @_;
$sym = $sym->[0];
doTask($sym);
}
);
$mce->run();

print %data; # if I check contents of %data at this line in the code, its empty
}

sub doTask {
my ($sym) = @_;
$data{$sym} = 1;

print %data;
print "\n\n";

return;
}

最佳答案

使用 MCE::Map 模型可以正常工作,该模型具有内置的数据收集功能。

#!/usr/bin/perl
use strict;
use warnings;
use MCE::Map;

my @symbol = ('abc','def');
my $CPUs = 1;
my %data = ();

process();

sub process {
MCE::Map::init {chunk_size => 1, max_workers => $CPUs};
%data = mce_map {doTask($_)} @symbol;
print %data; # data exchange between the manager and worker processes works
}

sub doTask {
my ($sym) = @_;
$data{$sym} = 1;
return %data;
}

关于multithreading - Perl MCE 将哈希数据返回给主进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27856109/

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