使用Snakemake Checkpoint实现条件迭代的规则重复执行问题
关于Snakemake条件迭代优化的问题与解决尝试
问题背景
- 需求:在Snakemake工作流中重复执行若干规则,通过迭代优化输出结果
- 限制:无法动态向DAG添加作业(输出未达标时需再次迭代),因此预先创建最大迭代次数的所有作业,计划通过checkpoint的shell块中执行
touch操作,生成后续输出文件以跳过不必要的规则执行
尝试方案与遇到的问题
- 已尝试方案:为所有输入添加
ancient标记、使用--touch参数,均未达到预期效果 - 当前最优尝试的迭代逻辑:
1^(n-1) -> 2^(n-1) -> 3a^(n-1) -> 3b^(n-1) -> 4^(n-1) -> 1^(n) -> 2^(n) -> 3a^(n) -> 3b^(n) -> 4^(n) -> ...,对应代码见example.smk - 执行异常情况:
test_3_AAAAA规则被正确跳过,但test_3_BBBBB规则因提示**"Input files updated by another job: testing/step_0/3.done"**重复执行- 出现警告:"Warning: the following output files of rule test_3_BBBBB were not present when the DAG was created: {'testing/step_0/3b.done'}",详细日志见
example.log
核心需求
- 找到实现此类条件迭代的有效方法,或实现规则仅在输出缺失时执行的方案
- 希望保留Snakemake的资源与作业管理能力,暂不考虑完全依赖外部脚本控制迭代
解决方向(经Bli解答后)
修改代码逻辑,通过checkpoint的结果动态选择test_4规则的输入,对应代码见修改后的example.smk
内容的提问来源于stack exchange,提问作者Tylio
相关产品推荐
相关产品推荐

