Snakemake:防止重新运行子工作流

时间:2020-05-15 17:10:29

标签: snakemake

我有一个带有子工作流程的工作流程。子工作流程的DAG需要很长时间才能生成。有没有办法告诉Snakemake子工作流是最新的,并避免对其DAG进行长时间评估?

1 个答案:

答案 0 :(得分:1)

我不确定是否存在实现此目标的好方法,但是即使有一点点hack,以下方法也可以完成工作。

假设您的工作流程依赖于sw/Snakefile定义的子工作流程,该子工作流程将生成主要工作流程所使用的文件sw/test.txt。然后,您可以简单地利用条件Snakemake块来使用子工作流,以仅在该文件不存在时才生成sw/test.txt

import os

if os.path.exists("sw/test.txt"):
    rule result:
        input:
            "sw/test.txt"
        output:
            touch("result.txt")
else:
    subworkflow sw: 
        workdir:
            "sw"
        snakefile:
            os.path.join("sw/Snakefile")

    rule result:
        input:
            sw("test.txt")
        output:
            touch("result.txt")

通过这种方式,仅当sw/test.txt不存在时才评估子工作流DAG。当然,这也意味着,每当需要子工作流进行更新时,都必须显式地rm sw/test.txt