2010-09-23 21 views
7

Tôi muốn lập trình giới hạn công việc cho LSF commandbsub vào tập lệnh Perl của mình, khởi chạy công việc LSF dưới mui xe. Nếu tôi có khoảng 2000 việc làm, tôi muốn chạy tối đa 20 công việc tại bất kỳ thời điểm nào. Tôi đã thấy các tập lệnh khởi chạy 20 công việc và sau đó đợi cho tất cả chúng hoàn tất trước khi khởi chạy 20 công việc khác.Làm cách nào để chạy nhiều công việc từ một hàng đợi lớn cùng lúc trong Perl?

Trả lời

11

Một số mô-đun Perl hiện có, bao gồm Parallel::ForkManagerForks::Super (trong đó tôi là tác giả) cung cấp chức năng này.

Ngoài ra còn có một mô-đun LSF::JobManager mà tôi không biết gì khác.


Parallel :: ForkManager xương

use Parallel::ForkManager; 
$pm = new Parallel::ForkManager(20); 
foreach $job (@jobsToRun) { 
    $pm->start and next; 
    system("bsub -K $job"); # bsub -K job to wait until job finishes, right? 
    $pm->finish; 
} 


Và trong Forks :: Siêu

use Forks::Super MAX_PROC => 20; 
foreach $job (@jobsToRun) { 
    fork { cmd => "bsub -K $job" }; 
} 


+0

điều này thật tuyệt! cảm ơn nhiều – Gordon

+0

Sau tất cả những năm sử dụng LSF này, tôi vừa học về 'bsub -K'. Cảm ơn! –

Các vấn đề liên quan