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

问题描述 投票:1回答:1

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

snakemake
1个回答
0
投票

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

假设您的工作流程取决于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

© www.soinside.com 2019 - 2024. All rights reserved.