目录
- 引言
- 基本系统信息采集实现
- 添加GPU监控功能
- 使用Tkinter构建简单GUI
- 使用PyQt5构建更专业的界面
- 高级功能扩展
- 打包为可执行文件
引言
在科技飞速发展的今天,人工智能已经渗透到我们生活的方方面面,从基础的日常沟通到复杂的商业决策,智能技术的影响力正在以惊人的速度扩大。以自然语言处理为例,智能助手不仅能理解人类的日常对话,还能通过情感分析提供个性化的回应;在医疗领域,AI辅助诊断系统的准确率已达到专业医师水平,极大地提高了早期疾病筛查的效率。
面对这场深刻的技术变革,理解其背后的逻辑与应用场景变得至关重要。从技术角度看,机器学习算法的进步(如深度学习、强化学习)为AI应用提供了强大的计算基础;从应用层面看,智能推荐系统正在重塑电商和内容平台的用户体验,而自动驾驶技术则有望彻底改变未来的交通方式。这些发展都彰显出AI技术的巨大潜力。
通过深入探讨核心原理与实践案例,我们可以更清晰地把握技术趋势。例如,分析计算机视觉在安防监控中的实际应用,或研究预测算法在金融风控中的具体表现,都能帮助我们理解不同场景下的技术适配性。这种理解不仅有助于发掘潜在商业价值,更能为未来的技术创新与产业突破奠定坚实基础。随着5G、边缘计算等配套技术的发展,AI的应用边界还将持续扩展,带来更多令人期待的可能性。
核心库选择
GPUtil专门用于获取NVIDIA GPU信息:
platform模块提供基本的系统识别功能:
GUI开发选项对比:
tkinter(python标准库):
PyQt5/PySide6(第三方库):
psutil(Python System and Process Utilities)是一个跨平台的系统监控库,可以获取系统运行时的各种关键信息:
CPU相关:
- 使用率(psutil.cpu_percent())
- 核心数量(psutil.cpu_count())
- 温度监控(部分平台支持)
- 示例:监控CPU负载并设置告警阈值
内存管理:
- 物理内存总量及使用情况(psutil.virtual_memory())
- 交换分区信息(psutil.swap_memory())
- 示例:实时显示内存使用曲线图
磁盘信息:
- 分区信息(psutil.disk_partitions())
- 使用情况(psutil.disk_usage())
- IO统计(psutil.disk_io_counters())
- 示例:监控磁盘剩余空间并预警
网络监控:
- 网络接口信息(psutil.net_if_addrs())
- IO统计(psutil.net_io_counters())
- 连接信息(psutil.net_connections())
显存使用情况
- GPU温度监控
- 负载百分比
- 示例:深度学习训练时的GPU监控面板
- 操作系统类型(platform.system())
- 系统版本(platform.version())
- 处理器架构(platform.MAChine())
示例:生成系统诊断报告
- 优势:无需额外安装,适合简单界面
- 缺点:界面较简陋,功能有限
示例应用:基础系统监控仪表盘
优势:
- 丰富的UI组件(表格、图表等)
- 支持多线程
- 现代化界面设计
缺点:
- 需要单独安装
- 学习曲线较陡
示例应用:
- 专业级系统监控工具
- 带历史数据可视化的性能分析器
基本系统信息采集实现
import psutil
import platform
from datetime import datetime
def get_system_info():
# CPU信息
cpu_percent = psutil.cpu_percent(interval=1)
cpu_count = psutil.cpu_count(logical=False)
cpu_logical = psutil.cpu_count(logical=True)
# 内存信息
mem = psutil.virtual_memory()
mem_total = round(mem.total / (1024**3), 2)
mem_used = round(mem.used / (1024**3), 2)
mem_percent = mem.percent
# 磁盘信息
disk = psutil.disk_usage('/')
disk_total = round(disk.total / (1024**3), 2)
disk_used = round(disk.used / (1024**3), 2)
disk_percent = disk.percent
# 系统信息
system_info = {
"system": platform.system(),
"node": platform.node(),
"release": platform.release(),
"version": platform.version(),
"machine": platform.machine(),
"boot_time": datetime.fromtimestamp(psutil.boot_time()).strftime("%Y-%m-%d %H:%M:%SGoqFS")
}
return {
"cpu": {
"percent": cpu_percent,
"cores_physical": cpu_count,
"cores_logical": cpu_logical
},
"memory": {
"total": mem_total,
"used": mem_used,
"percent": mem_percent
},
"disk": {
"total": disk_total,
"used": disk_used,
"percent": disk_percent
},
"system": system_info
}
添加GPU监控功能
try:
import GPUtil
def get_gpu_info():
gpus = GPUtil.getGPUs()
if gpus:
return {
"name": gpus[0].name,
"load": gpus[0].load * 100,
"memory_used": round(gpus[0].memoryUsed, 1),
"memory_total": round(gpus[0].memoryTotal, 1),
"temperature": gpus[0].temperature
}
return None
except ImportError:
def get_gpu_info():
return None
使用Tkinter构建简单GUI
import tkinter as tk
from tkinter import ttk
class HardwareMonitor(tk.Tk):
def __init__(self):
super().__init__()
self.title("硬件监控工具")
self.geometry("600x400")
# 创建标签框架
self.cpu_frame = ttk.LabelFrame(self, text="CPU 信息")
self.mem_frame = ttk.LabelFrame(self, text="内存 信息")
self.disk_frame = ttk.LabelFrame(self, text="磁盘 信息")
self.sys_frame = ttk.LabelFrame(self, text="系统 信息")
# 布局
self.cpu_frame.pack(fill="both", expajsnd=True, padx=5, pady=5)
self.mem_frame.pack(fill="both", expand=True, padx=5, pady=5)
self.disk_frame.pack(fill="both", expand=True, padx=5, pady=5)
self.sys_frame.pack(fill="both", expand=True, padx=5, pady=5)
# 添加标签
self.cpu_label = ttk.Label(self.cpu_frame, text="")
self.mem_label = ttk.Label(self.mem_frame, text="")
self.disk_label = ttk.Label(self.disk_frame, text="")
self.sys_label = ttk.Label(self.sys_frame, text="")
self.cpu_label.pack()
self.mem_label.pack()
self.disk_label.pack()
self.sys_label.pack()
self.update_data()
def update_data(self):
data = get_system_info()
gpu_data = get_gpu_info()
# 更新CPU信息
cpu_text = f"使用率: {data['cpu']['percent']}% | 物理核心: {data['cpu']['cores_physical']} | 逻辑核心: {data['cpu']['cores_logical']}"
self.cpu_label.config(text=cpu_text)
# 更新内存信息
mem_text = f"使用: {data['memory']['used']}GB / {data['memory']['total']}GB ({data['memory']['percent']}%)"
self.mem_label.config(text=mem_text)
# 更新磁盘信息
disk_text = f"使用: {data['disk']['used']}GB / {data['disk']['total']}GB ({data['disk']['percent']}%)"
self.disk_label.config(text=disk_text)
# 更新系统信息
sys_text = f"系统: {data['system']['system']} {data['system']['release']} | 主机名: {data['system']['node']} | 启动时间: {data['system']['boot_time']}"
self.sys_label.config(text=sys_text)
# 如果有GPU信息则显示
if gpu_data:
if not hasattr(self, 'gpu_frame'):
self.gpu_frame = ttk.LabelFrame(self, text="GPU 信息")
self.gpu_frame.pack(fill="both", expand=True, padx=5, pady=5)
self.gpu_label = ttk.Label(self.gpu_frame, text="")
self.gpu_label.pack()
gpu_text = f"{gpu_data['name']} | 负载: {gpu_data['load']:.1f}% | 显存: {gpu_data['memory_used']}GB/{gpu_data['memory_total']}GB | 温度: {gpu_data['temperature']}C"
self.gpu_label.config(text=gpu_text)
self.after(1000, self.update_data)
使用PyQt5构建更专业的界面
from PyQt5.QtWidgets import (QApplication, QMainWindow, QvboxLayout,
QWidget, QLabel, QTabWidget, QProgressBar)
from PyQt5.QtCore import QTimer
import sys
class QtHardwareMonitor(QMainWindow):
def __init__(self):
super().__init__()
self.setWindowTitle("硬件监控工具")
self.setGeometry(100, 100, 800, 600)
self.central_widget = QWidget()
self.setCentralWidget(self.central_widget)
self.layout = QVBoxLayout(self.central_widget)
self.tabs = QTabWidget()
self.layout.addWidget(self.tabs)
# 创建标签页
self.cpu_tab = QWidget()
self.mem_tab = QWidget()
self.disk_tab = QWidget()
self.sys_tab = QWidget()
self.tabs.addTab(self.cpu_tab, "CPU")
self.tabs.addTab(self.mem_tab, "内存")
self.tabs.addTab(self.disk_tab, "磁盘")
self.tabs.addTab(self.sys_tab, "系统")
# 初始化UI
self.init_cpu_tab()
self.init_mem_tab()
self.init_disk_tab()
self.init_sys_tab()
# 定时更新
self.timer = QTimer()
javascript self.timer.timeout.connect(self.update_data)
self.timer.start(1000)
def init_cpu_tab(self):
layout = QVBoxLayout(self.cpu_tab)
self.cpu_label = QLabel("CPU 信息")
self.cpu_progress = QProgressBar()
layout.addWidget(self.cpu_label)
layout.addWidget(self.cpu_progress)
def update_data(self):
data = get_GoqFSsystem_info()
# 更新CPU信息
cpu_text = f"CPU 使用率: {data['cpu']['percent']}% | 物理核心: {data['cpu']['cores_physical']} | 逻辑核心: {data['cpu']['cores_logical']}"
self.cpu_label.setText(cpu_text)
self.cpu_progress.setValue(data['cpu']['percent'])
# 更新其他标签页...
高级功能扩展
实时图表显示 使用matplotlib可以创建实时更新的硬件使用率图表:
from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg
from matplotlib.figure import Figure
class ChartMonitor(tk.Tk):
def __init__(self):
super().__init__()
self.title("硬件监控图表")
# 创建图表
self.fig = Figure(figsize=(5, 4), dpi=100)
self.ax = self.fig.add_subplot(111)
# 初始化数据
self.x_data = list(range(60))
self.y_data = [0] * 60
# 创建画布
self.canvas = FigureCanvasTkAgg(self.fig, master=self)
self.canvas.draw()
self.canvas.get_tk_widget().pack(side=tk.TOP, fill=tk.BOTH, expand=True)
self.update_chart()
def update_chart(self):
# 获取当前CPU使用率
cpu_percent = psutil.cpu_percent(interval=1)
# 更新数据
self.y_data.append(cpu_percent)
if len(self.y_data) > 60:
self.y_data.pop(0)
# 清除并重新绘制
self.ax.clear()
self.ax.plot(self.x_data, self.y_data[-60:], 'r-')
self.ax.set_ylim(0, 100)
self.ax.set_title("CPU 使用率 (%)")
self.ax.set_xlabel("时间 (秒)")
self.canvas.draw()
self.after(1000, self.update_chart)
网络监控功能 可以扩展网络监控功能:
def get_network_info():
net_io = psutil.net_io_counters()
return {
"bytes_sent": net_io.bytes_sent,
"bytes_recv": net_io.bytes_recv,
"packets_sent": net_io.packets_sent,
"packets_recv": net_io.packets_recv
}
打包为可执行文件
使用PyInstaller可以将应用打包为独立可执行文件:
pip install pyinstaller pyinstaller --onefile --windowed hardware_monitor.py
这些方法提供了从简单到高级的硬件监控实现方案,可以根据需求选择合适的组件进行组合或扩展。具体来说:
基础监控方案
适用于入门级需求,主要包含:
- CPU/GPU温度监控(如使用
lm-sensors工具) - 内存使用率统计(通过
free -m命令) - 磁盘空间检查(
df -h命令) 应用场景:个人开发者调试或小型服务器基础运维
中级监控方案
增加实时性和可视化能力:
# Prometheus配置片段
scrape_configs:
- job_name: 'node'
static_configs:
- targets: ['192.168.1.100:9100']
- 使用
Prometheus+Grafana搭建监控仪表盘 - 集成网络流量监控(如
nload工具) - 添加SMART硬盘健康检测 典型配置示例:
高级企业级方案
包含自动化预警和分布式监控:
- 部署
Zabbix或NagIOS监控集群 - 实现SNMP协议android设备管理
- 定制化开发监控插件(如通过Python编写硬件探针) 扩展建议:
- 对关键业务服务器配置双通道监控
- 建立分级告警机制(邮件/短信/企业微信通知)
特殊场景方案
- 工业环境:增加4-20mA信号采集模块
- 边缘计算:部署轻量级
Telegraf代理 - 高安全要求:采用硬件加密的监控数据链路
方案选择时需综合考虑硬件规模(单机/集群)、监控粒度(秒级/分钟级)以及预算成本。建议从基础方案开始,逐步按需扩展功能模块。
以上就是基于Python开发电脑硬件监控工具的详细内容,更多关于Python监控的资料请关注编程客栈(www.devze.com)其它相关文章!
加载中,请稍侯......
精彩评论