蛇行在开始下一个并行作业之前等待完成所有并行作业

ct3nt3jp  于 2021-09-29  发布在  Java
关注(0)|答案(0)|浏览(180)

我已经编写了snakemake规则,它运行muscle(msa工具)来计算目录中所有文件的多序列比对(msa)。由于不同的文件彼此不依赖,因此该任务基本上是并行的。问题是,snakemake在n个“批次”中运行此规则,其中n是作为参数提供给snakemake的核心数: snakemake -j 4 msa .
snake make以并行运行4个作业开始,并在开始新的“批处理”4个作业之前等待每一个作业完成。这会浪费cpu时间,因为输入文件的大小变化很大,其msa计算时间可能从几秒到几分钟不等。导致以下执行流:

job1|-----           |job5|-----     |...|->
job2|---             |job6|--------  |...|->
job3|----------------|job7|--        |...|->
job4|-               |job8|----------|...|->

我怎样才能让snakemake真正实现工作的并行化?

CLUSTER_IDS, = glob_wildcards(os.path.join(WORK_DIR, "fasta", "{id}.fasta"))
rule msa:
    input:
       expand(os.path.join(WORK_DIR, "msa", "{id}.afa"), id=CLUSTER_IDS)

rule:
    input:
        os.path.join(WORK_DIR, "fasta", "{id}.fasta")
    output:
        os.path.join(WORK_DIR, "msa", "{id}.afa")
    shell:
        "{MUSCLE_PATH}/muscle3.8.31_i86darwin64 -in {input} -out {output}"

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题