psutil:获取所有进程的 cpu
psutil: get cpu of all processes
也许我忽略了一些东西,但我不知道如何在不迭代它们的情况下一次为所有进程获取 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-percent
包含在 attr
列表中,因为帮助说明
When interval is 0.0 or None compares system CPU times elapsed since last call or module import, returning immediately. That means the first time this is called it will return a meaningless 0.0 value which you are supposed to ignore.
这是一种测量每个进程的 CPU 时间,因此,您无法在单个 Python 解释器进程中避免 process_count * interval
秒。也许,你可以通过多处理来减少时间。
为了计算 CPU%,您必须等待。
不过,您不必为每个 process/iteration 等待 0.1 秒 。
相反,遍历所有进程,使用 interval=0 调用 cpu_percent(),忽略 return 值,然后等待 0.1 秒(或更多)。
第二次迭代所有进程 cpu_percent(interval=0) 将 return 一个有意义的值。
也许我忽略了一些东西,但我不知道如何在不迭代它们的情况下一次为所有进程获取 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-percent
包含在 attr
列表中,因为帮助说明
When interval is 0.0 or None compares system CPU times elapsed since last call or module import, returning immediately. That means the first time this is called it will return a meaningless 0.0 value which you are supposed to ignore.
这是一种测量每个进程的 CPU 时间,因此,您无法在单个 Python 解释器进程中避免 process_count * interval
秒。也许,你可以通过多处理来减少时间。
为了计算 CPU%,您必须等待。 不过,您不必为每个 process/iteration 等待 0.1 秒 。 相反,遍历所有进程,使用 interval=0 调用 cpu_percent(),忽略 return 值,然后等待 0.1 秒(或更多)。 第二次迭代所有进程 cpu_percent(interval=0) 将 return 一个有意义的值。