后浪云Python教程:用Python来统计本机CPU利用率

模块win32pdh是Python中的一个模块,封装了Windows Performance Data Helpers API。

后浪云Python教程:用Python来统计本机CPU利用率插图

win32pdh方法

AddCounter    添加一个新计数器 

AddEnglishCounter    通过英文名称为查询添加计数器 

RemoveCounter    删除一个打开的计数器。 

EnumObjectItems    枚举对象的项目 

EnumObjects    枚举对象 

OPENQUERY    打开一个新查询 

CloseQuery    关闭打开的查询。 

MakeCounterPath    制作完全解决的计数器路径 

GetCounterInfo    检索有关计数器的信息,例如数据大小,计数器类型,路径和用户提供的数据值。 

GetFormattedCounterValue    检索格式化的计数器值 

CollectQueryData    收集指定查询中所有计数器的当前原始数据值,并更新每个计数器的状态代码。 

ValidatePath    验证指定的计数器是否存在于计数器路径中指定的计算机上。 

ExpandCounterPath    检查指定的计算机(如果没有指定本地计算机),则检查与计数器路径中的通配符字符串匹配的计数器和计数器实例。 

ParseCounterPath    解析计数器路径的元素。 

ParseInstanceName    解析实例名称的元素 

SetCounterScaleFactor    设置在请求格式化计数器值时应用于指定计数器的计算值的比例因子。 

BrowseCounters    显示计数器浏览对话框,以便用户可以选择要返回给调用者的计数器。 

ConnectMachine    连接到指定的计算机,并在PDH DLL中创建和初始化计算机条目。 

LookupPerfIndexByName    返回与指定计数器名称对应的计数器索引。 

LookupPerfNameByIndex    返回与指定索引对应的性能对象名称。 

完整代码:python统计cpu利用率

#-*-coding=utf-8-*-
import win32pdh
import time
# Counter paths
PROCESSOR_PERCENT = r'\Processor(_Total)\% Processor Time'
MEMORY_PERCENT = r'\Memory\% Committed Bytes In Use'
MEMORY_COMMITTED = r'\Memory\Committed Bytes'
PROCESS_BYTES = lambda x: r'\Process(%s)\Private Bytes' % x
class Query:
  def __init__(self):
    self.counters = {}
    self.query = None
    self.query = win32pdh.OpenQuery(None, 0)
  def add_counter(self, path):
    if win32pdh.ValidatePath(path) != 0:
      raise Exception('Invalid path: %s' % path)
    counter = win32pdh.AddCounter(self.query, path, 0)
    self.counters[path] = counter
  def remove_counter(self, path):
    win32pdh.RemoveCounter(self.counters[path])
    del self.counters[path]
  def get_values(self):
    values = {}
    win32pdh.CollectQueryData(self.query)
    for path in self.counters:
      status, value = win32pdh.GetFormattedCounterValue(
          self.counters[path], win32pdh.PDH_FMT_LONG)
      values[path] = value
    return values
sysinfo_query = Query()
sysinfo_query.add_counter(PROCESSOR_PERCENT)
sysinfo_query.add_counter(MEMORY_PERCENT)
sysinfo_query.get_values()
def get_sysinfo():
  """Return a tuple (mem_usage, cpu_usage)."""
  info = sysinfo_query.get_values()
  return info[MEMORY_PERCENT], info[PROCESSOR_PERCENT]
listcpu=[]
while True:
  time.sleep(2)
  x,y=get_sysinfo()
  listcpu.append(y)
  if len(listcpu)==10:
    icount=0
    for c in listcpu:
      if c>4:
        icount+=1
    if icount>5:
      print "在统计的1分钟内,cpu已经有5次大于4%"
    listcpu=[]
  print y

THE END