You need to enable JavaScript to run this app. 如何检测不同运行时长Python脚本的CPU和内存资源占用情况?
优惠活动
大模型
产品
解决方案
定价
更多

如何检测不同运行时长Python脚本的CPU和内存资源占用情况?

短时长脚本CPU与内存占用对比方案

psutil完全可以满足你的需求,只需要调整调用方式避免阻塞即可,以下是具体实现逻辑:

调整psutil的cpu_percent调用逻辑

psutil.cpu_percent()传入interval=0参数时不会阻塞等待,而是返回上一次调用该函数到本次调用之间的CPU使用率,完全适配毫秒级的进程监控场景:

  • 使用psutil.Popen()启动目标脚本作为子进程
  • 进程启动后立刻调用一次子进程的cpu_percent(interval=0)初始化统计基准,这次返回值无实际意义
  • 以1~10ms的间隔轮询子进程状态,每次轮询时记录cpu_percent(interval=0)和memory_info().rss的数值
  • 子进程退出后,取CPU采样的平均值/峰值、内存采样的峰值作为对应脚本的资源占用指标

超短时长脚本优化方案

对于运行时长小于10ms的脚本,轮询采样可能无法覆盖完整生命周期,可改用进程累计CPU时间计算整体使用率:

  • 启动子进程时记录系统时间t1,子进程退出时记录系统时间t2,计算总运行时长runtime = t2 - t1
  • 读取子进程退出后的cpu_times()属性,累加用户态CPU时间user和内核态CPU时间system得到总CPU消耗时间cpu_total
  • 整体CPU使用率计算公式为 (cpu_total / runtime) * 100%
  • 内存指标可读取进程退出前最后一次采样的RSS值,或对应平台的进程内存峰值统计接口

参考实现代码

import psutil
import time

def monitor_script(script_cmd):
    # 启动目标脚本子进程
    proc = psutil.Popen(script_cmd, shell=False)
    # 初始化CPU统计基准
    proc.cpu_percent(interval=0)
    start_time = time.perf_counter()
    
    cpu_samples = []
    memory_samples = []
    
    while proc.is_running():
        try:
            cpu_samples.append(proc.cpu_percent(interval=0))
            memory_samples.append(proc.memory_info().rss)
            time.sleep(0.001) # 采样间隔可根据需求调整
        except psutil.NoSuchProcess:
            break
    
    runtime = time.perf_counter() - start_time
    # 统计最终指标
    avg_cpu = sum(cpu_samples) / len(cpu_samples) if cpu_samples else 0
    peak_memory = max(memory_samples) if memory_samples else 0
    # 基于累计CPU时间计算的CPU使用率
    cpu_times = proc.cpu_times()
    total_cpu = cpu_times.user + cpu_times.system
    total_cpu_usage = (total_cpu / runtime) * 100 if runtime > 0 else 0

    return {
        "runtime_s": round(runtime, 6),
        "avg_cpu_percent": round(avg_cpu, 2),
        "total_cpu_percent": round(total_cpu_usage, 2),
        "peak_memory_kb": round(peak_memory / 1024, 2)
    }

测试注意事项

  • 单个脚本建议重复运行10~100次取统计平均值,消除系统调度带来的随机误差
  • 测试期间关闭无关后台进程,避免资源抢占影响测试结果
  • 若需要更高精度的指标,可配合操作系统原生工具辅助测试,比如Linux下的time命令、perf工具,Windows下的性能计数器等

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 22:54:03