我试图测量进程树的cpu使用情况。
目前获取进程的cpu_usage(没有子进程)会有,但是我得到了奇怪的结果。
import psutil
p = psutil.Process(PID)
p.cpu_percent
让我回到float
> 100
,这怎么可能呢?
btw PID
是简单的pid
def foo():
i = 0
while True:
i += 1
根据任务管理器,其cpu使用率约为12%
我希望获得12.5
或类似的输出。
答案 0 :(得分:7)
我阅读了一些关于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()。
由于我从其他地方得到了这个答案,我会给你一个检查它的链接 out:http://psutil.readthedocs.io/en/release-2.2.1/#psutil.Process.cpu_percent