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

Snakemake工作流如何记录单任务耗时与总耗时?

Snakemake日志配置与性能分析问题解答

背景

运行Snakemake工作流时,控制台仅记录任务开始时间(示例:[Fri Jul 12 10:39:15 2024]),希望调整日志以显示每个任务耗时、工作流总耗时(单位:毫秒),用于对比PyPSA-Eur不同求解器的性能,手动计算耗时效率低下。工作流运行示例如下:

Assuming unrestricted shared filesystem usage.
Building DAG of jobs...
Provided cores: 8
Rules claiming more threads will be scaled down.
Job stats:
job         count
--------  -------
run_main        1
total           1

Select jobs to execute...
Execute 1 jobs...

[Fri Jul 12 10:39:15 2024]
localrule run_main:
    input: input/input.txt
    output: output/output.txt
    jobid: 0
    reason: Code has changed since last execution
    resources: tmpdir=C:\Users\eis\AppData\Local\Temp\PyCharmPortableTemp

Running snake_script.py at C:\python_env\workspace\resilient\snakemake_demo
Processed data written to output/output.txt
[Fri Jul 12 10:39:15 2024]
Finished job 0.
1 of 1 steps (100%) done

a) 是否存在可调整格式字符串等的日志配置文件?

Snakemake没有直接提供用于修改控制台输出格式的日志配置文件,但可以通过两种方式实现耗时记录需求:

  • 规则内自定义计时:在每个规则中嵌入Python计时逻辑,计算并打印任务耗时:
rule run_main:
    input: "input/input.txt"
    output: "output/output.txt"
    run:
        import time
        start = time.time()
        # 原有规则执行逻辑
        shell("python snake_script.py")
        elapsed_ms = (time.time() - start) * 1000
        print(f"[任务 {wildcards} 耗时] {elapsed_ms:.2f} 毫秒")
  • 全局钩子(Hook)计时:利用Snakemake 7.0+版本的钩子功能,全局捕获任务的开始和结束时间,自动计算耗时:
import time
from snakemake.utils import min_version
min_version("7.0.0")

def job_start(job):
    job._start_time = time.time()

def job_finish(job):
    elapsed_ms = (time.time() - job._start_time) * 1000
    print(f"[完成任务 {job.jobid}] 耗时: {elapsed_ms:.2f} 毫秒")

snakemake.hooks.job_start = job_start
snakemake.hooks.job_finish = job_finish

工作流总耗时可通过外部脚本包裹Snakemake命令实现,比如:

start=$(date +%s%N)
snakemake --cores 8
end=$(date +%s%N)
echo "工作流总耗时: $(( (end - start) / 1000000 )) 毫秒"

b) 是否有针对Snakemake的性能分析工具,可帮助监控与优化工作流性能?

有多种工具和方法支持Snakemake工作流的性能分析,适配PyPSA-Eur求解器对比场景:

  • Snakemake内置报告:运行snakemake --report performance_report.html,生成的HTML报告包含所有任务的执行时间、资源占用等数据,可直观对比不同求解器任务的耗时差异。
  • --stats参数导出统计数据:运行snakemake --stats workflow_stats.json,生成JSON格式的详细统计文件,包含每个任务的开始/结束时间、资源使用情况,可编写脚本批量解析对比求解器性能。
  • 第三方可视化工具:使用snakeviz将任务耗时数据可视化,通过导入统计数据生成交互式图表,快速定位耗时最长的求解步骤。
  • PyPSA-Eur日志解析:PyPSA-Eur的求解器规则会输出包含时间戳的日志文件,直接解析这些日志提取求解阶段的耗时,无需额外修改工作流即可对比不同求解器的性能。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 07:44:54