【问题标题】:How can I run multiple jobs from a large queue at the same time in Perl?如何在 Perl 中同时从一个大队列运行多个作业?
【发布时间】:2015-05-29 05:30:25
【问题描述】:

我想将 LSF command bsub 的作业限制编程到我的 Perl 脚本中,该脚本在后台启动 LSF 作业。如果我有 2000 个工作,我希望在任何给定时间最多运行 20 个工作。我见过启动 20 个作业的脚本,然后等待它们全部完成,然后再启动另外 20 个。

【问题讨论】:

    标签: perl unix lsf


    【解决方案1】:

    几个现有的 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;
    }
    


    在 Forks::Super 中

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


    【讨论】:

    • 在使用 LSF 这么多年之后,我才知道bsub -K。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 2017-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多