【问题标题】:Running jobs concurrently with multiple steps通过多个步骤同时运行作业
【发布时间】:2021-11-05 19:35:42
【问题描述】:

我需要运行 10,000 个管道,每个管道包含 5 个步骤(流程)

另一个要求是我想同时运行大约 300 个。意思是,我想启动 300 个,然后对于完成 5 个步骤的每个管道,我想启动一个新的管道。我找不到使用频道的方法。

一些初步的想法: 首先将 10,000 个通道拆分为 300 个项目的缓冲区。 但是当一个结束时,它对开始一个新的并没有帮助......

proteins = Channel.fromPath( '/some/path/*.fa' ).buffer( size: 300 )

process A {
  input:
  file query_file from proteins

  output:
}
process B {
}

【问题讨论】:

    标签: nextflow


    【解决方案1】:

    您可以在nextflow.config 中使用以下内容大致实现您想要的:

    process {
    
        maxForks = 300
    }
    
    executor {
    
        queueSize = 300
    }
    
    • maxForks 指令设置可以并行执行的最大流程实例数。通过在 nextflow.config 中设置此值,我们确保将其一揽子应用到您的五个进程中的每一个。如果您有其他不想被此指令覆盖的进程,您当然可以使用一个或多个process selectors 来选择您想要限制此配置的进程。或者,只需将指令添加到您的五个流程定义中的每一个。

    • executorqueueSize 只是定义了执行器将并行处理的任务数。

    这当然不能保证在开始一个新块之前完成一个包含五个进程的块,但这通常不是什么大问题。

    【讨论】:

    • 我明白了,但是我怕第一个流程结束的时候,不是第二步,而是第一个流程的另一个实例。我会测试它是如何工作的......
    • @MosheShaham 我能问为什么这是个问题吗?通常执行顺序无关紧要,因为无论如何您都需要完成所有作业。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多