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

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

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

  1. job1|----- |job5|----- |...|->
  2. job2|--- |job6|-------- |...|->
  3. job3|----------------|job7|-- |...|->
  4. job4|- |job8|----------|...|->

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

  1. CLUSTER_IDS, = glob_wildcards(os.path.join(WORK_DIR, "fasta", "{id}.fasta"))
  2. rule msa:
  3. input:
  4. expand(os.path.join(WORK_DIR, "msa", "{id}.afa"), id=CLUSTER_IDS)
  5. rule:
  6. input:
  7. os.path.join(WORK_DIR, "fasta", "{id}.fasta")
  8. output:
  9. os.path.join(WORK_DIR, "msa", "{id}.afa")
  10. shell:
  11. "{MUSCLE_PATH}/muscle3.8.31_i86darwin64 -in {input} -out {output}"

暂无答案!

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

相关问题