perl中的简单并行处理
发布时间:2020-12-15 21:45:45 所属栏目:大数据 来源:网络整理
导读:我有一些代码块,在一些对象的函数内,可以并行运行并为我加速. 我尝试以下列方式使用subs :: parallel(所有这些都在函数体中): my $is_a_done = parallelize { # block a,do some work return 1; };my $is_b_done = parallelize { # block b,do some work re
我有一些代码块,在一些对象的函数内,可以并行运行并为我加速.
我尝试以下列方式使用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等待线程阻塞并等待前一个线程在需要时完成(更好的想法?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的返回值,你需要一些更复杂的东西(简单地切换到一个散列会有很大帮助)但是在你提供的代码示例中,你忽略了它们,这使事情变得容易. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |