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

如何获取Python中各subprocess子进程的单独运行时长?

嘿,我来帮你搞定这个问题~

首先明确一点:subprocess模块本身并没有提供像p.runtime()这样直接获取进程运行时长的方法,不过我们可以通过手动记录进程启动和结束的时间来计算,操作起来非常简单,完全可以无缝整合到你现有的代码里。

下面是修改后的完整代码示例,我会一步步给你解释:

import subprocess
import time

# 假设这是你的命令列表,替换成实际要运行的命令
batch = ["echo hello", "sleep 2", "ls -l"]
process_records = []

# 启动进程时,同时记录每个进程的启动时间和对应的命令
for cmd in batch:
    # 用time.perf_counter()获取高精度的启动时间,比time.time()更适合计时
    start_time = time.perf_counter()
    p = subprocess.Popen(cmd.split())  # 如果命令是字符串,split成列表;如果本身是列表就直接传
    # 把进程对象、启动时间、命令存到列表里,方便后续对应
    process_records.append((p, start_time, cmd))

# 等待每个进程结束,计算并输出运行时长
for p, start_time, cmd in process_records:
    # 等待进程完成
    p.wait()
    # 记录结束时间
    end_time = time.perf_counter()
    # 计算时长,保留两位小数更直观
    run_duration = end_time - start_time
    print(f"命令 `{cmd}` 的运行时长: {run_duration:.2f} 秒")

关键细节说明:

  • 我用了time.perf_counter()而不是time.time(),因为前者是专门为测量时间间隔设计的,精度更高,不受系统时间调整的影响,非常适合计算进程运行时长。
  • 我把进程对象、启动时间和对应的命令存在了同一个元组里,这样后续等待进程结束时,能准确对应到每个命令的运行时长,不会搞混。
  • 如果你的命令本身就是列表形式(比如["python", "my_script.py", "--arg", "value"]),那直接把cmd.split()改成cmd就行。

如果你还想获取进程的CPU实际占用时间(区别于墙上时钟时间,也就是进程真正在CPU上运行的时间,不是等待的时间),那可以借助psutil库(需要额外安装pip install psutil),不过这就超出subprocess原生功能了。如果只是需要从启动到结束的总耗时,上面的方法完全够用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 07:48:30