欢迎访问宙启技术站
智能推送

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 系统上使用。