当前位置: 首页 > news >正文

Windows 系统监控工具:项目架构与实现详解

文章目录

    • 一、项目架构设计
      • 1.1 架构总览
      • 1.2 数据流向图
      • 1.3 核心特点
    • 二、核心功能实现
      • 2.1 数据采集层 - SystemMonitor 类
        • 关键代码:system_monitor.py
      • 2.2 界面展示层 - PyQt5 实现
        • 关键代码:ui/main_window.py
    • 三、项目依赖管理
      • 3.1 requirements.txt 详解
        • 依赖说明
      • 3.2 环境配置
    • 四、效果展示
      • 4.1 命令行版本演示
      • 4.2 图形界面版本特色
    • 总结
      • 📥 资源下载
      • 原创声明
    • 参考资料
    • 结尾小组件

  • 👉 关联文章|Windows 系统监控工具:Python 项目打包为 EXE 详解

简介:本文聚焦 Windows 系统监控、PyQt5 桌面界面、psutil 数据采集与工程化实践,提供完整从架构到实现的入门到进阶指南。
关键词:Windows、系统监控、PyQt5、psutil、GUI、实时监控

在这里插入图片描述

一、项目架构设计

本项目采用经典的单体架构模式,通过模块化设计实现了数据采集与界面展示的分离。整体架构可以分为三个核心层次:

1.1 架构总览

用户界面层 - PyQt5
业务逻辑层 - SystemMonitor
数据访问层 - psutil
系统信息标签页
进程管理标签页
CPU监控模块
内存监控模块
磁盘监控模块
网络监控模块
进程管理模块
硬件信息获取
系统状态查询
进程信息采集
💡 为什么选择这种架构模式

单体架构的优势:

  • 开发简单:所有功能模块在同一个进程中,便于调试和部署
  • 性能优异:模块间通信无网络开销,数据传递效率高
  • 资源占用低:适合桌面应用场景,避免微服务架构的复杂性

分层设计的好处:

  • 职责清晰:界面层专注展示,业务层处理逻辑,数据层负责采集
  • 易于维护:修改某一层不影响其他层,降低代码耦合度
  • 可扩展性:新增监控指标只需在对应层添加功能模块

1.2 数据流向图

用户界面SystemMonitorpsutil库定时器触发数据更新获取CPU信息返回CPU数据获取内存信息返回内存数据获取磁盘信息返回磁盘数据获取进程列表返回进程数据发送格式化数据更新界面显示每秒循环执行用户界面SystemMonitorpsutil库定时器
💡 数据流设计原理

定时更新机制:

  • 使用 QTimer 每1000ms触发一次数据更新
  • 避免频繁调用系统API造成性能损耗
  • 确保界面响应流畅,不阻塞用户操作

异步处理策略:

  • 数据采集在主线程执行,但通过信号槽机制解耦
  • 界面更新采用批量模式,减少重绘次数
  • 错误处理机制确保单个模块异常不影响整体运行

1.3 核心特点

  • 模块化设计:每个功能模块独立封装,便于维护和扩展
  • 实时更新:采用定时器机制,每秒刷新系统状态
  • 跨平台兼容:基于 psutil 库,理论上支持 Windows、Linux、macOS
  • 用户友好:PyQt5 提供现代化的图形界面

二、核心功能实现

2.1 数据采集层 - SystemMonitor 类

数据采集层是整个系统的核心,负责从操作系统获取各种硬件和软件信息。

关键代码:system_monitor.py
import psutil
import time
from typing import Dict, List, Anyclass SystemMonitor:def __init__(self):"""初始化系统监控器"""self.last_net_io = psutil.net_io_counters()self.last_time = time.time()def get_cpu_info(self) -> Dict[str, Any]:"""获取CPU信息"""try:cpu_percent = psutil.cpu_percent(interval=1)cpu_count = psutil.cpu_count()cpu_freq = psutil.cpu_freq()return {'usage_percent': cpu_percent,'core_count': cpu_count,'current_freq': cpu_freq.current if cpu_freq else 0,'max_freq': cpu_freq.max if cpu_freq else 0}except Exception as e:return {'error': str(e)}def get_memory_info(self) -> Dict[str, float]:"""获取内存信息"""try:memory = psutil.virtual_memory()swap = psutil.swap_memory()return {'total': round(memory.total / (1024**3), 2),'available': round(memory.available / (1024**3), 2),'used': round(memory.used / (1024**3), 2),'usage_percent': memory.percent,'swap_total': round(swap.total / (1024**3), 2),'swap_used': round(swap.used / (1024**3), 2),'swap_percent': swap.percent}except Exception as e:return {'error': str(e)}<details>
<summary>💡 psutil 库核心优势</summary>**跨平台兼容性:**
- 统一的API接口,支持Windows、Linux、macOS
- 自动处理不同操作系统的底层差异
- 无需编写平台特定的系统调用代码**性能优化:**
- C语言编写的底层实现,执行效率高
- 智能缓存机制,避免重复的系统调用
- 支持批量获取数据,减少API调用次数**功能完整性:**
- 涵盖CPU、内存、磁盘、网络、进程等所有监控维度
- 提供详细的硬件信息和实时状态数据
- 支持进程管理操作(终止、暂停、恢复等)</details>def get_process_list(self) -> List[Dict]:"""获取进程列表"""processes = []for proc in psutil.process_iter(['pid', 'name', 'cpu_percent', 'memory_info']):try:proc_info = proc.infoprocesses.append({'pid': proc_info['pid'],'name': proc_info['name'],'cpu_percent': proc_info['cpu_percent'],'memory_info': proc_info['memory_info'].rss,})except (psutil.NoSuchProcess, psutil.AccessDenied, psutil.ZombieProcess):continuereturn sorted(processes, key=lambda x: x['cpu_percent'], reverse=True)

2.2 界面展示层 - PyQt5 实现

界面层采用 PyQt5 框架,提供了现代化的桌面应用体验。

关键代码:ui/main_window.py
from PyQt5.QtWidgets import QMainWindow, QTabWidget, QVBoxLayout, QWidget
from PyQt5.QtCore import QTimer
from .system_tab import SystemTab
from .process_tab import ProcessTab
from system_monitor import SystemMonitorclass MainWindow(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle("系统监控工具")self.setGeometry(100, 100, 800, 600)# 初始化系统监控器self.monitor = SystemMonitor()# 创建标签页self.tab_widget = QTabWidget()self.system_tab = SystemTab()self.process_tab = ProcessTab()self.tab_widget.addTab(self.system_tab, "系统信息")self.tab_widget.addTab(self.process_tab, "进程管理")self.setCentralWidget(self.tab_widget)# 设置定时器self.timer = QTimer()self.timer.timeout.connect(self.update_data)self.timer.start(1000)  # 每秒更新def update_data(self):"""更新数据"""cpu_info = self.monitor.get_cpu_info()memory_info = self.monitor.get_memory_info()disk_info = self.monitor.get_disk_info()network_info = self.monitor.get_network_info()process_list = self.monitor.get_process_list()self.system_tab.update_info(cpu_info, memory_info, disk_info, network_info)self.process_tab.update_processes(process_list)
QTimer 定时器
update_data 方法
SystemMonitor 数据采集
SystemTab 系统信息更新
ProcessTab 进程信息更新

三、项目依赖管理

3.1 requirements.txt 详解

项目的依赖管理通过 requirements.txt 文件实现,确保环境的一致性和可重现性。

PyQt5==5.15.10
psutil==5.9.8
依赖说明
项目依赖
PyQt5 5.15.10
psutil 5.9.8
界面组件库
信号槽机制
跨平台GUI
系统信息获取
进程管理
硬件监控
💡 版本选择策略

PyQt5 5.15.10 选择原因:

  • 稳定性:LTS版本,bug修复完善,生产环境可靠
  • 兼容性:与Python 3.8+完美兼容,支持Windows 10/11
  • 功能完整:包含所有必需的GUI组件和高级特性
  • 打包友好:与PyInstaller配合良好,打包体积优化

psutil 5.9.8 选择原因:

  • 性能优异:C语言底层实现,系统调用效率高
  • API稳定:接口设计成熟,向后兼容性好
  • 功能全面:覆盖所有主流操作系统的监控需求
  • 社区活跃:持续维护更新,问题响应及时

3.2 环境配置

# 创建虚拟环境
python -m venv venv# 激活虚拟环境 (Windows)
venv\Scripts\activate# 使用国内镜像加速安装
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/# 运行程序
python main.py

四、效果展示

4.1 命令行版本演示

首先,我们实现了一个命令行版本用于快速验证功能:

┌─────────────────────────────────────────────────────────────┐
│                === Windows 系统监控工具 ===                │
├─────────────────────────────────────────────────────────────┤
│ CPU 信息:                                                   │
│   使用率: 15.2%  ████████████████░░░░░░░░       │
│   核心数: 8                                                 │
│   频率: 2400.0 MHz                                         │
├─────────────────────────────────────────────────────────────┤
│ 内存信息:                                                   │
│   总内存: 16.0 GB                                          │
│   已使用: 8.5 GB  ██████████████████████████░░░░░░  │
│   可用内存: 7.5 GB                                         │
│   使用率: 53.1%                                            │
├─────────────────────────────────────────────────────────────┤
│ C盘信息:                                                    │
│   总容量: 500.0 GB                                         │
│   已使用: 250.0 GB  ████████████████████████████████████░░  │
│   可用空间: 250.0 GB                                       │
│   使用率: 50.0%                                            │
├─────────────────────────────────────────────────────────────┤
│ 网络信息:                                                   │
│   发送: 1.2 GB ↑                                           │
│   接收: 5.8 GB ↓                                           │
├─────────────────────────────────────────────────────────────┤
│ 进程信息 (按CPU占用排序):                                   │
│   PID: 1234, chrome.exe     CPU: 12.5%, 内存: 256.0 MB    │
│   PID: 5678, python.exe     CPU: 8.3%,  内存: 128.0 MB    │
│   PID: 9012, explorer.exe   CPU: 2.1%,  内存: 64.0 MB     │
│   PID: 3456, notepad.exe    CPU: 0.5%,  内存: 32.0 MB     │
│   PID: 7890, winlogon.exe   CPU: 0.1%,  内存: 16.0 MB     │
├─────────────────────────────────────────────────────────────┤
│                    按 Ctrl+C 退出...                       │
└─────────────────────────────────────────────────────────────┘

在这里插入图片描述

在这里插入图片描述

4.2 图形界面版本特色

图形界面版本提供了更加直观和用户友好的体验:

主窗口
系统信息标签页
进程管理标签页
CPU使用率图表
内存状态显示
磁盘空间监控
网络流量统计
进程列表表格
搜索过滤功能
进程操作按钮
实时状态更新

核心特色功能:

  • 实时监控:每秒自动更新数据,保持信息的实时性
  • 直观展示:图表化显示系统状态,一目了然
  • 交互操作:支持进程搜索、排序、终止等管理功能
  • 响应式设计:界面布局自适应窗口大小变化

总结

本文详细介绍了一个基于 Python 的 Windows 系统监控工具的完整开发过程,从架构设计到功能实现,再到依赖管理和效果展示。该项目展示了如何使用现代 Python 技术栈构建一个功能完整、用户友好的桌面应用程序。

关键技术要点:

  • 模块化设计:清晰的职责分离,便于维护和扩展
  • psutil 库:高效的跨平台系统信息获取
  • PyQt5 框架:现代化的桌面GUI开发
  • 项目管理:规范的依赖管理和环境配置
💡 项目扩展建议

功能扩展方向:

  • 历史数据记录:添加SQLite数据库存储历史监控数据
  • 告警机制:设置阈值,超限时发送邮件或桌面通知
  • 远程监控:支持通过Web界面远程查看系统状态
  • 插件系统:支持第三方插件扩展监控功能

技术优化方向:

  • 异步处理:使用asyncio提升数据采集效率
  • 缓存机制:减少重复的系统调用,提升性能
  • 配置文件:支持用户自定义监控项和界面布局
  • 国际化:支持多语言界面切换

希望这个项目能为您在 Python 桌面应用开发方面提供有价值的参考和启发。


📥 资源下载

📋 一键获取项目资源

完整项目包下载:

  • 🔗 SystemMonitor 完整源码仓库 - 最新源码、文档与示例

快速部署脚本:

# 从源码仓库克隆并快速运行
git clone https://gitcode.com/2401_82619496/pythonlab_code
python -m venv venv && venv\Scripts\activate
pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple/
python main.py

技术栈清单:

  • Python 3.11.5
  • PyQt5 5.15.10
  • psutil 5.9.6
  • PyInstaller 5.13.2

原创声明

本文为原创内容,首发于 2025.10.1。欢迎转载,但请保留原文链接与作者信息。

参考资料

  • 项目源码与文档(本仓库)
  • PyQt5 官方文档(GUI 框架参考)
  • psutil 使用手册(系统信息采集参考)
  • Python 官方文档(语言与标准库参考)

结尾小组件

如果本文对你有帮助,欢迎点赞、收藏、分享。也欢迎留言交流你的实现思路与优化策略。

http://www.dtcms.com/a/430921.html

相关文章:

  • 丹阳企业网站建设如何安装wordpress的备份
  • RAG核心特性:ETL
  • 手机网站显示建设中怎么看公司网站是哪里做的
  • GameObject 常见类型详解 -- 傻瓜(GOOBER)
  • 【Ubuntu 20.04升级python3.9后终端打不开的bug】
  • ttkbootstrap Tableview 右键编辑中文支持解决方案
  • 【数据结构与算法学习笔记】双指针
  • 模仿建设银行网站asp网站开发工具神器
  • C#基础06-函数异常
  • PostgreSQL LIMIT 语句详解
  • 网站开发是什么部门wordpress 缩略图清理
  • Kubernetes网络策略实战:精准控制frontend与backend跨-tail通信
  • 关于制作网站收费标准网站的结构类型
  • 【word解析】从OLE到OMML:公式格式转换的挑战与解决方案
  • 云梦网站开发如何做好企业网站
  • 常德网站制作公司多少钱服务器出租
  • Python 2025:低代码开发与自动化编程新纪元
  • wordpress手机端网站模板建站程序下载
  • SQL 多表查询常用语法速查:INNER JOIN / LEFT JOIN / RIGHT JOIN
  • p2p网贷网站开发页面设计简单吗
  • Java SE “异常处理 + IO + 序列化”面试清单(含超通俗生活案例与深度理解)
  • Redis 数据库管理与通信基础
  • GameObject 常见类型详解 -- 运输工具(TRANSPORT)
  • Spring的事务管理机制
  • DAY22 XML、XML解析
  • Lazygi - 让git操作不再困难
  • sns社交网站建设东莞服务36招
  • 有那些方法推广网站可用的在线网页代理
  • 一种基于模型残差的密度聚类方法之二(电力线分股)
  • 基于Keil下多文件打包生成LIB库的具体步骤