You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Snakemake如何针对单个通配符按执行顺序进行dry run

Snakemake能否针对单个通配符按实际执行顺序开展dry run

执行常规dry run时,输出末尾会显示作业计数信息,同时默认提示输出顺序不代表实际执行顺序,示例输出如下:

Job counts:
        count   jobs
        1       all
        1       assembly_eval
        5       cat_fastq
        1       createGenLogDir
        5       createLogDir
        5       flye
        5       medaka_first
        5       medaka_second
        5       minimap_first
        5       quast_medaka_first
        5       quast_medaka_second
        5       quast_racon_first
        5       racon_first
        5       symLinkFQ
        58
This was a dry-run (flag -n). The order of jobs does not reflect the order of execution.

当前期望实现两个核心功能:

  • 获取单个通配符对应的dry run命令(聚合规则除外):同一规则下不同作业的命令仅input、output、param指令中的通配符取值存在差异,不需要输出同规则的冗余重复内容
  • 按照实际执行顺序打印工作流,提升可视化效果

通过snakemake -h未找到匹配的内置参数,期望找到类似--rulegraph相对于--dag的去冗余效果的对应功能,如果暂无成熟简便的解决方案,将在项目GitHub页面提交功能增强建议。


可行实现方案

提取单个通配符对应的dry run命令

可以直接指定目标通配符对应的输出文件作为执行目标,搭配参数执行dry run:
snakemake -n -p 你的目标输出文件路径
该命令只会打印生成该目标文件所需的、对应当前通配符取值的所有作业命令,不会输出其他通配符对应的作业内容。
如果需要批量获取所有通配符取值的对应命令,可以先通过snakemake --list拿到所有预期生成的输出文件列表,循环传入上述命令即可。如果需要提取规则级的命令模板,可以通过snakemake --summary拿到所有作业的通配符映射关系,提取单条规则的命令框架后替换对应通配符取值即可,不需要手动解析全量作业输出。

按实际执行顺序输出工作流

默认dry run不输出真实执行顺序,是因为Snakemake实际运行时会根据可用资源、作业优先级动态调整同层级无依赖作业的执行顺序,不存在绝对固定的执行序列。如果需要获取符合依赖逻辑的调度顺序,可以通过两种方式实现:

  • 执行dry run时加上--cores N参数(N为你实际运行时设置的核心数),此时Snakemake会完整模拟调度过程,输出的作业顺序和实际运行时的优先级调度顺序一致,不会再出现「顺序不反映实际执行」的提示
  • 如果需要规则级的去冗余执行顺序,可以先用snakemake --rulegraph输出规则间的依赖关系图,对图中节点做拓扑排序即可得到规则层面的先后执行顺序,和--rulegraph相对于--dag的去冗余逻辑完全一致。

如果上述操作对你的使用场景来说过于繁琐,可以提交功能增强建议,目前Snakemake官方稳定版还没有内置一键实现「单通配符维度去冗余+按执行顺序输出dry run结果」的专用参数。


内容的提问来源于stack exchange,提问作者BCArg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 10:09:16