【发布时间】:2015-05-29 05:30:25
【问题描述】:
我想将 LSF command bsub 的作业限制编程到我的 Perl 脚本中,该脚本在后台启动 LSF 作业。如果我有 2000 个工作,我希望在任何给定时间最多运行 20 个工作。我见过启动 20 个作业的脚本,然后等待它们全部完成,然后再启动另外 20 个。
【问题讨论】:
我想将 LSF command bsub 的作业限制编程到我的 Perl 脚本中,该脚本在后台启动 LSF 作业。如果我有 2000 个工作,我希望在任何给定时间最多运行 20 个工作。我见过启动 20 个作业的脚本,然后等待它们全部完成,然后再启动另外 20 个。
【问题讨论】:
几个现有的 Perl 模块,包括 Parallel::ForkManager 和 Forks::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;
}
在 Forks::Super 中
use Forks::Super MAX_PROC => 20;
foreach $job (@jobsToRun) {
fork { cmd => "bsub -K $job" };
}
【讨论】:
bsub -K。谢谢!