У меня есть несколько блоков кода в функции некоторого объекта, который может работать параллельно и ускорить вещи для меня.
Я пытался использовать 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