如何在Perl中同时从大队列中运行多个作业?

时间:2010-09-23 17:06:58

标签: perl unix lsf

我想将LSF command bsub的作业限制编入我的Perl脚本中,该脚本会启动LSF作业。如果我有2000个工作岗位,我想在任何时候最多运行20个工作岗位。我已经看过脚本可以启动20个作业,然后等待它们全部完成再启动另外20个作业。

1 个答案:

答案 0 :(得分:11)

现有的几个Perl模块,包括Parallel::ForkManagerForks::Super(我是作者)都提供此功能。

还有一个LSF::JobManager模块我不知道其他任何事情。

<小时/>

Parallel :: ForkManager骨架

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;
}

<小时/>

在福克斯::超级

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

<小时/>