用Python来统计本机CPU利用率
模块win32pdh是Python中的一个模块,封装了Windows Performance Data Helpers API。
win32pdh方法
AddCounter添加一个新计数器
AddEnglishCounter通过英文名称为查询添加计数器
RemoveCounter删除一个打开的计数器。
EnumObjectItems枚举对象的项目
EnumObjects枚举对象
OPENQUERY打开一个新查询
CloseQuery关闭打开的查询。
MakeCounterPath制作完全解决的计数器路径
GetCounterInfo检索有关计数器的信息,例如数据大小,计数器类型,路径和用户提供的数据值。
GetFormattedCounterValue检索格式化的计数器值
CollectQueryData收集指定查询中所有计数器的当前原始数据值,并更新每个计数器的状态代码。
ValidatePath验证指定的计数器是否存在于计数器路径中指定的计算机上。
ExpandCounterPath检查指定的计算机(如果没有指定本地计算机),则检查与计数器路径中的通配符字符串匹配的计数器和计数器实例。
ParseCounterPath解析计数器路径的元素。
ParseInstanceName解析实例名称的元素
SetCounterScaleFactor设置在请求格式化计数器值时应用于指定计数器的计算值的比例因子。
BrowseCounters显示计数器浏览对话框,以便用户可以选择要返回给调用者的计数器。
ConnectMachine连接到指定的计算机,并在PDH DLL中创建和初始化计算机条目。
LookupPerfIndexByName返回与指定计数器名称对应的计数器索引。
LookupPerfNameByIndex返回与指定索引对应的性能对象名称。
#-*-coding=utf-8-*-importwin32pdhimporttime#CounterpathsPROCESSOR_PERCENT=r\Processor(_Total)\%ProcessorTimeMEMORY_PERCENT=r\Memory\%CommittedBytesInUseMEMORY_COMMITTED=r\Memory\CommittedBytesPROCESS_BYTES=lambdax:r\Process(%s)\PrivateBytes%xclassQuery:def__init__(self):self.counters={}self.query=Noneself.query=win32pdh.OpenQuery(None,0)defadd_counter(self,path):ifwin32pdh.ValidatePath(path)!=0:raiseException(Invalidpath:%s%path)counter=win32pdh.AddCounter(self.query,path,0)self.counters[path]=counterdefremove_counter(self,path):win32pdh.RemoveCounter(self.counters[path])delself.counters[path]defget_values(self):values={}win32pdh.CollectQueryData(self.query)forpathinself.counters:status,value=win32pdh.GetFormattedCounterValue(self.counters[path],win32pdh.PDH_FMT_LONG)values[path]=valuereturnvaluessysinfo_query=Query()sysinfo_query.add_counter(PROCESSOR_PERCENT)sysinfo_query.add_counter(MEMORY_PERCENT)sysinfo_query.get_values()defget_sysinfo():"""Returnatuple(mem_usage,cpu_usage)."""info=sysinfo_query.get_values()returninfo[MEMORY_PERCENT],info[PROCESSOR_PERCENT]listcpu=[]whileTrue:time.sleep(2)x,y=get_sysinfo()listcpu.append(y)iflen(listcpu)==10:icount=0forcinlistcpu:ifc>4:icount+=1ificount>5:print"在统计的1分钟内,cpu已经有5次大于4%"listcpu=[]printy