python实现对电脑性能的记录(cpu,内存等)

Python系统资源监控工具开发详解(附完整源码)

本文将详细介绍如何使用 Python 开发一个系统资源实时监控工具,能够定时采集 CPU、内存、磁盘、网络等指标,并将数据记录到格式美观的 Excel 文件中。
当资源使用率异常变化时,还会自动高亮异常数据,方便后续分析。


目录


项目概览

通过定时采集系统的 CPU、内存、磁盘、网络流量等指标,将数据记录到一个带时间戳命名的 Excel 文件中。
如果检测到指标的变化超过设定的阈值,则在 Excel 中高亮显示异常字段,帮助我们快速定位系统负载问题。


终端运行输出

在这里插入图片描述

技术栈与依赖

  • Python 3.x
  • 第三方库:
    • psutil (采集系统信息)
    • pandas (操作表格数据)
    • openpyxl (读写Excel并设置格式)

安装依赖:

pip install psutil pandas openpyxl

功能需求分析

  • 每小时记录一次完整数据
  • 每3秒检测一次资源变化,变化异常时立即记录并高亮
  • 将所有数据记录到日志目录 logs/ 中
  • Excel列宽适配、表头加粗、异常项标红
  • 文件命名带日期时间,防止覆盖

核心代码讲解

1. 参数配置

INTERVAL = 60 * 60  # 每小时记录一次
CPU_THRESHOLD = 10  # CPU变化阈值10%
MEMORY_THRESHOLD = 5  # 内存变化阈值5%
DISK_THRESHOLD = 10  # 磁盘变化阈值10%

日志文件保存在 logs/ 文件夹,并根据启动时间命名。

2. 数据采集

使用 psutil 获取系统的实时信息,包括 CPU、内存、磁盘、网络流量。

cpu = psutil.cpu_percent(interval=1)
memory = psutil.virtual_memory().percent
net = psutil.net_io_counters()
disk = psutil.disk_usage('/')

这些数据将作为每条记录写入Excel。

3. Excel初始化与格式调整

  • 创建新Excel文件

  • 写入表头

  • 调整列宽

  • 表头加粗,居中对齐

from openpyxl.styles import Font, Alignment

header_font = Font(bold=True)
for cell in ws[1]:
    cell.font = header_font
    cell.alignment = Alignment(wrap_text=True)

4. 写入数据与异常高亮

每次写入一行采集到的数据,如果某些字段异常,则在写入时将该字段字体标红。

red_font = Font(color="FF0000")
ws.cell(row=current_row, column=col_idx).font = red_font

5. 异常检测逻辑

与上一条记录做对比,如果变化幅度超过设定的阈值,则判定为异常。

if abs(current['CPU负载率(%)'] - last['CPU负载率(%)']) > CPU_THRESHOLD:
    anomalies.append('CPU负载率(%)')

6. 主程序流程

  • 初始化,记录第一次采集数据
  • 每3秒采集一次资源
  • 检测是否有异常变化,异常则立即记录
  • 每隔一小时,无论是否异常,都定时保存一次
  • 程序持续运行,直到手动停止

完整源码

import os
import time
from datetime import datetime

import psutil
from openpyxl import Workbook, load_workbook
from openpyxl.styles import Font, Alignment

# ====== 参数配置 ======
INTERVAL = 60 * 60  # 每小时记录一次
CPU_THRESHOLD = 10  # CPU变化阈值10%
MEMORY_THRESHOLD = 5  # 内存变化阈值5%
DISK_THRESHOLD = 10  # 磁盘变化阈值10%

LOG_DIR = "logs"
os.makedirs(LOG_DIR, exist_ok=True)
RUN_TIME = datetime.now().strftime("%Y%m%d %H-%M-%S")
EXCEL_FILE = os.path.join(LOG_DIR, f"system_monitor_{RUN_TIME}.xlsx")

columns = [
    '时间',
    'CPU负载率(%)',
    '内存使用率(%)',
    '发送流量(MB)',
    '接收流量(MB)',
    '磁盘使用率(%)',
    '磁盘空闲(GB)'
]

# ====== 初始化Excel文件 ======
wb = Workbook()
ws = wb.active
ws.append(columns)
wb.save(EXCEL_FILE)

# ====== 数据采集 ======
def collect_data():
    cpu = psutil.cpu_percent(interval=1)
    memory = psutil.virtual_memory().percent
    net = psutil.net_io_counters()
    disk = psutil.disk_usage('/')

    data = {
        '时间': datetime.now().strftime("%Y-%m-%d %H:%M:%S"),
        'CPU负载率(%)': cpu,
        '内存使用率(%)': memory,
        '发送流量(MB)': net.bytes_sent / 1024 / 1024,
        '接收流量(MB)': net.bytes_recv / 1024 / 1024,
        '磁盘使用率(%)': disk.percent,
        '磁盘空闲(GB)': disk.free / 1024 / 1024 / 1024,
    }
    return data

# ====== 调整Excel格式 ======
def adjust_excel_format(file_path):
    wb = load_workbook(file_path)
    ws = wb.active

    header_font = Font(bold=True)
    for cell in ws[1]:
        cell.font = header_font
        cell.alignment = Alignment(wrap_text=True)

    col_widths = {'A': 20, 'B': 15, 'C': 15, 'D': 15, 'E': 15, 'F': 15, 'G': 15}
    for col_letter, width in col_widths.items():
        ws.column_dimensions[col_letter].width = width

    wb.save(file_path)

# ====== 写入数据到Excel,异常高亮 ======
def write_data_to_excel(data, highlight_fields=None):
    wb = load_workbook(EXCEL_FILE)
    ws = wb.active
    row = [data[col] for col in columns]
    ws.append(row)

    if highlight_fields:
        current_row = ws.max_row
        red_font = Font(color="FF0000")
        for field in highlight_fields:
            if field in columns:
                col_idx = columns.index(field) + 1
                ws.cell(row=current_row, column=col_idx).font = red_font

    wb.save(EXCEL_FILE)
    adjust_excel_format(EXCEL_FILE)

# ====== 检测异常逻辑 ======
def check_anomaly(current, last):
    anomalies = []
    if last is None:
        return anomalies

    if abs(current['CPU负载率(%)'] - last['CPU负载率(%)']) > CPU_THRESHOLD:
        anomalies.append('CPU负载率(%)')
    if abs(current['内存使用率(%)'] - last['内存使用率(%)']) > MEMORY_THRESHOLD:
        anomalies.append('内存使用率(%)')
    if abs(current['磁盘使用率(%)'] - last['磁盘使用率(%)']) > DISK_THRESHOLD:
        anomalies.append('磁盘使用率(%)')

    return anomalies

# ====== 主程序 ======
def main():
    print("系统监控程序启动!")
    last_save_time = time.time()
    baseline_data = collect_data()
    write_data_to_excel(baseline_data)
    print("初始化完成,首次数据记录。")

    while True:
        current_time = time.time()
        temp_data = collect_data()
        anomalies = check_anomaly(temp_data, baseline_data)

        if anomalies:
            print(f"⚠️ 异常变化检测到:{anomalies},记录数据!")
            write_data_to_excel(temp_data, highlight_fields=anomalies)
            baseline_data = temp_data

        if current_time - last_save_time >= INTERVAL:
            print("🕐 1小时定时到了,正常记录一次。")
            fresh_data = collect_data()
            write_data_to_excel(fresh_data)
            baseline_data = fresh_data
            last_save_time = current_time

        time.sleep(3)

if __name__ == "__main__":
    main()


总结

Python 强大的第三方库 psutil 和 openpyxl,实现了一个小巧灵活、功能完整的系统资源监控工具。
具备实时监控、异常检测、高亮提示、自动保存Excel日志等功能,且代码结构清晰,易于扩展和二次开发。

可以根据实际需求调整监控间隔、阈值设定,或者增加更多指标的监控,例如GPU使用率、进程占用情况等

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值