Tôi có một vài khối mã, bên trong một hàm của một số đối tượng, có thể chạy song song và tăng tốc độ cho tôi.xử lý song song đơn giản trong perl
tôi đã cố gắng sử dụng subs::parallel
theo cách sau (tất cả điều này là trong một cơ thể của một hàm):
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
}
Đầu tiên, hãy chú ý tôi sử dụng if
chờ bài để chặn và chờ cho thread trước để kết thúc khi cần thiết (một ý tưởng tốt hơn? if
là khá xấu xí ...).
Thứ hai, tôi nhận được một lỗi:
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
Thú vị. Vấn đề là '$ is_a_done' được kiểm tra trong hai luồng khác nhau, đó là một sự lạm dụng/báo trước của' subs :: parallel': * Bạn không nên chuyển sang một chuỗi con/song song khác các giá trị trả về trước đó từ các chương trình con song song khác mà không đọc các giá trị của chúng. * Tôi thừa nhận rằng tôi không thấy báo trước được * rõ ràng * được ghi lại trong phiên bản 0.8 của 'subs :: parallel', tuy nhiên. – pilcrow