Snakemake 似乎以广度优先的方式遍历 DAG。是否可以(例如通过选项/标志/等)强制snakemake深度优先遍历DAG?
我能想到的一种方法是为每条规则设置优先级:
rule all:
input:
["third_a.txt", "third_b.txt", "third_c.txt"]
rule first:
output:
touch("first_{sample}.txt")
priority: 1
rule second:
input:
rules.first.output
output:
touch("second_{sample}.txt")
priority: 2
rule third:
input:
rules.second.output
output:
touch("third_{sample}.txt")
priority: 3
如果您现在使用
snakemake -j 1
运行它,它将执行深度优先!
一段时间以来一直在尝试寻找解决方法。
我的问题是我有最初的规则会产生大的临时文件,然后是后来的聚合规则。
greedy
或 ilp
调度程序都会运行一堆无序的初始规则,这些规则不会提高聚合效率,而且我会耗尽磁盘空间。顺便说一句,设置优先级也不起作用。
我发现的最好的解决方案是批处理:
然后我有一个脚本可以相应地运行批次。
我的解决方案并不理想,因为直到前一批尚未完全完成后,下一批才开始,但它比仅仅摆脱磁盘错误要好。
正确的解决方案应该是在调度程序中设置一个标志来指示深度优先级...