我有一个带有子工作流程的工作流程。子工作流程的DAG需要很长时间才能生成。有没有办法告诉Snakemake子工作流是最新的,并避免对其DAG进行长时间评估?
我不确定是否存在实现此目标的好方法,但是即使有一点点技巧,也可以通过以下方法完成工作。
假设您的工作流程取决于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
。