2

也许我忽略了一些东西,但我无法弄清楚如何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

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

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

4

2 回答 2

5

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

于 2016-08-25T07:12:41.463 回答
1

process_count * interval这是一种测量每个进程的 CPU 时间的方法,因此,在单个 Python 解释器进程中无法避免秒数。也许,您可以通过多处理来减少时间。

https://docs.python.org/3/library/multiprocessing.html

于 2016-08-24T10:45:28.403 回答