7

我试图测量进程树的 CPU 使用率。

目前获得一个进程(没有子进程)的 cpu_usage 就可以了,但我得到了奇怪的结果。

import psutil
p = psutil.Process(PID)
p.cpu_percent

还给我float> 100,这怎么可能?

顺便说一句PID,是一些简单的 pid

def foo():
    i = 0
    while True:
        i += 1

根据任务管理器,它的 cpu 使用率大约是12%

我想得到一个输出12.5或类似的东西。

4

1 回答 1

13

我阅读了一些关于 psutil 的文档,这就是我得到的:

注意:百分比 > 100 是合法的,因为它可能是由在不同 CPU 内核上运行 > 多个线程的进程产生的。

所以为了摆脱 >100 你应该做这样的事情:

注意:返回的值不会在所有 CPU 内核之间平均分配(与 psutil.cpu_percent() 不同)。这意味着在具有 2 个 CPU 内核的系统上运行的繁忙循环进程将被报告为具有 100% 的 CPU 利用率,而不是 50%。这样做是为了与 UNIX 的“顶级”实用程序保持一致,并且也更容易识别占用 CPU 资源的进程(独立于 CPU 内核的数量)。必须注意的是,在上面的示例中,Windows 上的 taskmgr.exe 将报告 50% 的使用率。要模拟 Windows 的 taskmgr.exe 行为,您可以执行以下操作:

p.cpu_percent() / psutil.cpu_count()。

由于我从其他地方得到了这个答案,我会给你一个链接来检查它: http: //psutil.readthedocs.io/en/release-2.2.1/#psutil.Process.cpu_percent

于 2016-12-18T09:04:26.103 回答