gpt4 book ai didi

perl - perl 中的简单并行处理

转载 作者:行者123 更新时间:2023-12-04 16:56:23 25 4
gpt4 key购买 nike

我有一些代码块,在某个对象的函数中,它们可以并行运行并为我加快速度。

我尝试使用 subs::parallel通过以下方式(所有这些都在函数体中):

my $is_a_done = parallelize { 
# block a, do some work
return 1;
};
my $is_b_done = parallelize {
# block b, do some work
return 1;
};
my $is_c_done = parallelize {
# block c depends on a so let's wait (block)
if ($is_a_done) {
# do some work
};
return 1;
};
my $is_d_done = parallelize {
# block d, do some work
return 1;
};

if ($is_a_done && $is_b_done && $is_c_done && $is_d_done) {
# just wait for all to finish before the function returns
}

首先,请注意我使用 if等待线程阻塞并等待前一个线程在需要时完成(更好的主意? if 非常丑陋...)。

其次,我收到一个错误:
Thread already joined at /usr/local/share/perl/5.10.1/subs/parallel.pm line 259.
Perl exited with active threads:
1 running and unjoined
-1 finished and unjoined
3 running and detached

最佳答案

没看过subs::parallel之前,但是鉴于它正在为您完成所有线程处理,而且它似乎做错了,根据错误消息,我认为这有点可疑。

通常我不会建议像那样把它扔掉,但是你正在做的事情对于普通线程界面来说并不难,所以为什么不试一试,稍微简化一下问题呢?同时,我会回答你问题的另一部分。

use threads;
my @jobs;
push @jobs, threads->create(sub {
# do some work
});

push @jobs, threads->create(sub {
# do some other work
});

# Repeat as necessary :)

$_->join for @jobs; # Wait for everything to finish.

如果您使用来自这些 subs 的返回值(只需切换到哈希将有很大帮助),则需要更复杂的东西,但在您提供的代码示例中,您忽略了它们,这使事情变得容易。

关于perl - perl 中的简单并行处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3447638/

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