我已经编写了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}"
暂无答案!
目前还没有任何答案,快来回答吧!