[英]simple parallel processing in perl
我有一些代碼塊,在一些對象的函數內,可以並行運行並為我加速。
我嘗試以下列方式使用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.
如果你使用那些sub的返回值,你需要一些更復雜的東西(簡單地切換到一個散列會有很大幫助)但是在你提供的代碼示例中,你忽略了它們,這使事情變得容易。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.