Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235149
  • 博文数量: 32
  • 博客积分: 1971
  • 博客等级: 上尉
  • 技术积分: 390
  • 用 户 组: 普通用户
  • 注册时间: 2004-10-15 12:54
文章分类

全部博文(32)

文章存档

2012年(6)

2011年(19)

2009年(7)

分类: Python/Ruby

2011-01-21 12:23:54

我原先的程序使用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测试通过。
代码如下:
  1. import psutil,time

  2. def getProcessInfo(p):
  3.     """取出指定进程占用的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
  4.     """
  5.     try:
  6.         cpu = int(p.get_cpu_percent(interval=0))
  7.         rss, vms = p.get_memory_info()
  8.         name = p.name
  9.         pid = p.pid
  10.     except psutil.error.NoSuchProcess, e:
  11.         name = "Closed_Process"
  12.         pid = 0
  13.         rss = 0
  14.         vms = 0
  15.         cpu = 0
  16.     return [name.upper(), pid, rss, vms, cpu]

  17. def getAllProcessInfo():
  18.     """取出全部进程的进程名,进程ID,进程实际内存, 虚拟内存,CPU使用率
  19.     """
  20.     instances = []
  21.     all_processes = list(psutil.process_iter())
  22.     for proc in all_processes:
  23.         proc.get_cpu_percent(interval=0)
  24.     #此处sleep1秒是取正确取出CPU使用率的重点
  25.     time.sleep(1)
  26.     for proc in all_processes:
  27.         instances.append(getProcessInfo(proc))
  28.     return instances
阅读(17264) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~