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

用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返回与指定索引对应的性能对象名称。

#-*-coding=utf-8-*-
importwin32pdh
importtime
#Counterpaths
PROCESSOR_PERCENT=r'\Processor(_Total)\%ProcessorTime'
MEMORY_PERCENT=r'\Memory\%CommittedBytesInUse'
MEMORY_COMMITTED=r'\Memory\CommittedBytes'
PROCESS_BYTES=lambdax:r'\Process(%s)\PrivateBytes'%x
classQuery:
def__init__(self):
self.counters={}
self.query=None
self.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]=counter
defremove_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]=value
returnvalues
sysinfo_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=0
forcinlistcpu:
ifc>4:
icount+=1
ificount>5:
print"在统计的1分钟内,cpu已经有5次大于4%"
listcpu=[]
printy

发表回复