我原先的程序使用psutil取CPU使用率非常的慢,60个进程,取一次大约要9-12秒。如果取值快了准确性又很差。因为慢,当运行过程中进程消失还会导致异常。在询问了pstuil的开发者后,他给出了使用上的一些建议,并给出了解决方案,现在我取指定进程的CPU和内存使用率,及取全部进程的CPU和内存使用率已经比较正常了。
不过还有一个问题是,psutil取的CPU使用率感觉不是很准,和windows自带的taskmanager相比,瞬间值的数据差异还是有不少,而且所有进程的使用率相加后(float值相加,而不是我下面已经用了int()的取整),总共使用率会超过100%,我估计可能和多CPU有关,但不清楚到底原因,已经去问psutil的开发者了。
相对而言,现在这个程序已经比较好用了,而且能跨平台这是我最在意的。
程序在python2.5.4 psutil 0.2.0 windows xp/2003 32bit下测试通过,打包py2exe测试通过。
代码如下:
- import psutil,time
-
-
def getProcessInfo(p):
-
"""取出指定进程占用的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
-
"""
-
try:
-
cpu = int(p.get_cpu_percent(interval=0))
-
rss, vms = p.get_memory_info()
-
name = p.name
-
pid = p.pid
-
except psutil.error.NoSuchProcess, e:
-
name = "Closed_Process"
-
pid = 0
-
rss = 0
-
vms = 0
-
cpu = 0
-
return [name.upper(), pid, rss, vms, cpu]
-
-
def getAllProcessInfo():
-
"""取出全部进程的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
-
"""
-
instances = []
-
all_processes = list(psutil.process_iter())
-
for proc in all_processes:
-
proc.get_cpu_percent(interval=0)
-
#此处sleep1秒是取正确取出CPU使用率的重点
-
time.sleep(1)
-
for proc in all_processes:
-
instances.append(getProcessInfo(proc))
-
return instances
阅读(17264) | 评论(0) | 转发(0) |