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

如何用Python准确测量进程的平均CPU使用率?

Python测量进程平均CPU使用率的准确方法

问题描述

我想要用Python测量某个进程的平均CPU使用率。使用psutil只能获取某一时刻的CPU消耗情况,于是我编写了如下代码:

import psutil
import time

start = time.time()
end = time.time()

samples = []

while end - start < 2:
    for proc in psutil.process_iter():
        if proc.name() == "myprocess":
            samples.append(proc.cpu_percent())
            break
    end = time.time()

print("Average: " + str(sum(samples)/len(samples)))

但结果并不准确,因为该进程有时会进入休眠状态(不占用CPU),导致samples列表中出现大量0值。请问是否存在可以直接测量进程平均CPU使用率的内置函数?


解决方法

psutil其实提供了更合适的方式来计算进程的平均CPU使用率,不需要自己循环采样。以下两种方法都能解决你的问题:

方法1:利用cpu_percent(interval)直接获取时间段平均值

cpu_percent()方法支持传入interval参数(单位秒),它会在指定时间段内统计进程的CPU使用情况,返回的结果就是这段时间的平均使用率,不会出现频繁采样导致的0值干扰。

示例代码:

import psutil

# 定位目标进程
target_proc = None
for proc in psutil.process_iter():
    if proc.name() == "myprocess":
        target_proc = proc
        break

if target_proc:
    # 测量2秒内的平均CPU使用率
    avg_cpu = target_proc.cpu_percent(interval=2)
    print(f"Average: {avg_cpu}%")
else:
    print("未找到目标进程")

注意:调用该方法时程序会阻塞interval时长,因为它需要这段时间来完成统计。

方法2:通过CPU时间差值手动计算(非阻塞可选)

如果不想让程序阻塞,可以通过记录进程的CPU时间和系统时间的差值来计算平均使用率,这样能更灵活地控制统计周期:

import psutil
import time

# 定位目标进程
target_proc = None
for proc in psutil.process_iter():
    if proc.name() == "myprocess":
        target_proc = proc
        break

if target_proc:
    # 记录初始状态:进程CPU总耗时(用户态+内核态)和系统时间
    cpu_times_start = target_proc.cpu_times()
    start_cpu = cpu_times_start.user + cpu_times_start.system
    start_time = time.time()
    
    # 等待统计周期(这里用sleep模拟,也可以用非阻塞逻辑)
    time.sleep(2)
    
    # 记录结束状态
    cpu_times_end = target_proc.cpu_times()
    end_cpu = cpu_times_end.user + cpu_times_end.system
    end_time = time.time()
    
    # 计算时间差与CPU使用率
    elapsed_time = end_time - start_time
    cpu_used = end_cpu - start_cpu
    # 需除以CPU核心数,因为psutil的CPU使用率是按核心数归一化的
    avg_cpu = (cpu_used / elapsed_time) * 100 / psutil.cpu_count()
    print(f"Average: {avg_cpu:.2f}%")
else:
    print("未找到目标进程")

原代码不准确的原因

你的代码是频繁采样瞬间CPU使用率,当进程休眠时瞬间采样结果为0,这些0会拉低平均值。而实际需要的是一段时间内进程占用CPU的总比例,不是多个瞬间值的简单平均。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 01:18:26