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