psutil:获取所有进程的 CPU

cur*_*tpi 2 python python-2.7 psutil

也许我忽略了一些东西,但我无法弄清楚如何current_process.cpu_percent(interval=0.1)在不迭代它们的情况下一次获取所有进程。目前迭代需要process_count * interval几秒钟才能完成。有没有解决的办法?

到目前为止,我正在做:

#!/usr/bin/env python2
import psutil

cpu_count = psutil.cpu_count()

processes_info = []
for proc in psutil.process_iter():
    try:
        pinfo = proc.as_dict(attrs=['pid', 'username', 'memory_info', 'cpu_percent', 'name'])

        current_process = psutil.Process(pid=pinfo['pid'])

        pinfo["cpu_info"] = current_process.cpu_percent(interval=0.1)
        processes_info.append(pinfo)

    except psutil.NoSuchProcess:
        pass

print processes_info
Run Code Online (Sandbox Code Playgroud)

据我了解,我不能包含cpu-percentattr-list 中,因为帮助说明

当间隔为 0.0 或 None 时,比较自上次调用或模块导入以来经过的系统 CPU 时间,立即返回。这意味着第一次调用它时,它会返回一个你应该忽略的无意义的 0.0 值。

Gia*_*olà 5

为了计算 CPU%,您必须等待。不过,您不必为每个进程/迭代等待 0.1 秒。相反,迭代所有进程,以间隔=0 调用 cpu_percent(),忽略返回值然后等待 0.1 秒(或更多)。第二次遍历所有进程 cpu_percent(interval=0) 将返回一个有意义的值。