простая параллельная обработка в жемчуге

У меня есть несколько блоков кода в функции некоторого объекта, который может работать параллельно и ускорить вещи для меня.

Я пытался использовать 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
5
задан David B 10 August 2010 в 09:36
поделиться