Python中使用win32pdh库实现系统负载监控
发布时间:2023-12-25 08:18:31
win32pdh 是一个 Python 模块,它提供了对 Windows 性能数据帮助库 (PDH) 的接口。使用该库,可以方便地实现系统负载监控。
下面是一个简单的示例,演示如何使用 win32pdh 库监控系统负载。首先,我们需要安装 pywin32 库,方法是在命令提示符窗口运行以下命令:
pip install pywin32
然后,我们可以按照以下步骤实现系统负载监控:
1. 导入所需的库:
import win32pdh import time
2. 定义一个函数来获取系统负载信息:
def get_cpu_load():
query = win32pdh.OpenQuery(None, 0)
counters = win32pdh.EnumObjectItems(None, None, 'Processor', win32pdh.PERF_DETAIL_WIZARD)
instances = win32pdh.EnumObjectItems(None, None, counters[0], win32pdh.PERF_DETAIL_WIZARD)
cpu_loads = []
for instance in instances:
path = win32pdh.MakeCounterPath((None, counters[0], instance, None, 0, 'Processor'))
counter = win32pdh.AddCounter(query, path)
win32pdh.CollectQueryData(query)
time.sleep(0.1) # 等待一段时间来获取负载数据
cpu_load = win32pdh.GetFormattedCounterValue(counter, win32pdh.PDH_FMT_DOUBLE)[1]
cpu_loads.append(cpu_load)
win32pdh.CloseQuery(query)
return cpu_loads
该函数打开一个查询对象,然后枚举计数器和实例,通过计数器路径获取负载数据,并将其添加到一个列表中。最后,关闭查询对象并返回负载列表。
3. 编写主程序来检索和显示负载数据:
if __name__ == "__main__":
while True:
cpu_loads = get_cpu_load()
for i, cpu_load in enumerate(cpu_loads):
print(f"CPU {i+1} load: {cpu_load}%")
time.sleep(1) # 每隔一秒钟刷新负载数据
在主程序中,我们无限循环地调用 get_cpu_load() 函数来获取负载数据,并使用 time.sleep() 函数来设置刷新时间间隔。然后,将负载数据打印出来。
启动程序后,将会每秒打印一次每个 CPU 的负载百分比。
这是一个简单的系统负载监控示例,你可以根据需要对其进行扩展,例如添加其他性能计数器的监控,或者将负载数据存储到日志文件中。
注意:win32pdh 只能在 Windows 系统上使用。
