首页 > 编程语言 >使用Python实时监控服务系统资源

使用Python实时监控服务系统资源

时间:2024-04-18 12:01:08浏览次数:29  
标签:Network Python 实时 psutil append ax data 系统资源

使用Python实时监控服务系统资源

本文介绍如何使用Python的psutil库和matplotlib库来实时监控服务系统资源(CPU、内存、磁盘和网络),并将监控数据以图形化报表的形式展示。

第一步:安装必需库

首先,我们需要安装所需的库。可以通过pip安装psutilmatplotlib

pip install psutil matplotlib

第二步:导入库和初始化数据

在开始监控之前,我们需要导入psutilmatplotlib库,并初始化用于存储系统资源数据的变量,以及设置图表标签等信息。

import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import datetime

# 创建一个空画布和4个子图
fig, axs = plt.subplots(2, 2, figsize=(12, 8))

# 初始化时间戳和数据
x = []
data = {'CPU': [], 'Memory': [], 'Disk': [], 'Network_sent': [], 'Network_received': []}
labels = {'CPU': 'CPU Utilization', 'Memory': 'Memory Usage', 'Disk': 'Disk Usage', 'Network': 'Network Traffic'}

在这一步中,我们准备好了必要的库和数据结构,以便开始实时监控系统资源。

第三步:更新数据和绘制图表

接下来,我们定义一个函数update_plot(),在这个函数中我们会获取系统资源数据,更新数据存储结构并绘制图表。

def update_plot(frame):
    x.append(datetime.datetime.now())
    
    # 获取系统资源数据
    data['CPU'].append(psutil.cpu_percent())
    data['Memory'].append(psutil.virtual_memory().percent)
    disk_usage = psutil.disk_usage('/')
    data['Disk'].append(disk_usage.percent)
    network = psutil.net_io_counters()
    data['Network_sent'].append(network.bytes_sent / (1024 * 1024))
    data['Network_received'].append(network.bytes_recv / (1024 * 1024)
    
    # 更新子图表数据
    for i, (ax, (key, value)) in enumerate(zip(axs.flat, data.items())):
        ax.clear()
        ax.plot(x, value, color='C'+str(i), label=key)
        ax.set_title(labels.get(key, key))
        ax.set_ylabel('Usage (%)' if key in ['CPU', 'Memory', 'Disk'] else 'Traffic (MB)')
        ax.legend()
    
    plt.tight_layout()

在这一步中,我们已经可以通过update_plot()函数实时更新系统资源数据,并动态绘制图表。

第四步:创建动画并展示图表

最后,我们创建一个动画FuncAnimation,它会在固定时间间隔内调用update_plot()函数,并通过save_count参数避免潜在的缓存问题。

# 创建动画
ani = FuncAnimation(fig, update_plot, frames=None, interval=1000, save_count=1000)

plt.show()

通过这四个步骤,我们完成了一个实时监控Windows系统资源的程序,通过图表直观地展示系统资源使用情况。

完整代码如下:

import psutil
import matplotlib.pyplot as plt
from matplotlib.animation import FuncAnimation
import datetime

# 创建一个空画布和4个子图
fig, axs = plt.subplots(2, 2, figsize=(12, 8))

# 初始化时间戳和数据
x = []
data = {'CPU': [], 'Memory': [], 'Disk': [], 'Network_sent': [], 'Network_received': []}
labels = {'CPU': 'CPU Utilization', 'Memory': 'Memory Usage', 'Disk': 'Disk Usage', 'Network': 'Network Traffic'}


def update_plot(frame):
    x.append(datetime.datetime.now())

    # 获取系统资源数据
    data['CPU'].append(psutil.cpu_percent())
    data['Memory'].append(psutil.virtual_memory().percent)
    data['Disk'].append(psutil.disk_usage('/').percent)
    network = psutil.net_io_counters()
    data['Network_sent'].append(network.bytes_sent / (1024 * 1024))
    data['Network_received'].append(network.bytes_recv / (1024 * 1024))

    # 更新子图表数据
    for i, (ax, (key, value)) in enumerate(zip(axs.flat, data.items())):
        ax.clear()
        ax.plot(x, value, color='C' + str(i), label=key)
        ax.set_title(labels.get(key, key))
        ax.set_ylabel('Usage (%)' if key in ['CPU', 'Memory', 'Disk'] else 'Traffic (MB)')
        ax.legend()

    plt.tight_layout()


# 创建动画
ani = FuncAnimation(fig, update_plot, frames=None, interval=1000, save_count=1000)

plt.show()

本文讲解了如何使用Python和Matplotlib实时监控Windows系统资源,并通过图形化报表展示数据。希望对您有帮助!

标签:Network,Python,实时,psutil,append,ax,data,系统资源
From: https://www.cnblogs.com/xuxiaobing123/p/18143217

相关文章

  • Python 解决控制台输出颜色时出现乱码的问题 (windows平台)
    简介在python开发的过程中,经常会遇到需要打印各种信息。海量的信息堆砌在控制台中,就会导致信息都混在一起,降低了重要信息的可读性。这时候,如果能给重要的信息加上字体颜色,那么就会更加方便用户阅读了。当然了,控制台的展示效果有限,并不能像前段一样炫酷,只能做一些简单的设置。不......
  • 【python】使用r+模式先读后写和先写后读的区别
    最近学习python时,发现r+(读写)模式先读和先写,写入的位置不一致,经过测试发现:1、先写后读,写从文件开头开始写(覆盖原文),读从写入末尾开始读;2、先读后写,读从文件开头开始读,写从文件末尾开始写。点击查看代码'''test.txt#####随便写点啥######'''#先写后读withopen('test.txt......
  • 通过构建游戏学习-Python(四)
    通过构建游戏学习Python(四)原文:zh.annas-archive.org/md5/8d68d722c94aedcc91006ddf3f78c65a译者:飞龙协议:CCBY-NC-SA4.0第十一章:使用Pygame超越Turtle-使用Pygame制作贪吃蛇游戏UIPython游戏开发在某种程度上与pygame模块相关。到目前为止,我们已经学习了关于Py......
  • 华为云CodeArts IDE For Python 快速使用指南
    本文分享自华为云社区《华为云CodeArtsIDEForPython快速使用指南》,作者:为云PaaS服务小智。CodeArtsIDE带有Python扩展,为Python语言提供了广泛的支持。Python扩展可以利用CodeArtsIDE的代码补全、验证、调试和单元测试等特性,与多种Python解释器协同工作,轻松切换包......
  • 通过构建游戏学习-Python(五)
    通过构建游戏学习Python(五)原文:zh.annas-archive.org/md5/8d68d722c94aedcc91006ddf3f78c65a译者:飞龙协议:CCBY-NC-SA4.0第十四章:了解PyOpenGL几何形状和图形在游戏开发中起着至关重要的作用。当涉及到先进的图形技术的开发时,我们往往忽视它们的重要性。然而,许多流行的游......
  • 精通-Python-系统管理脚本编程(一)
    精通Python系统管理脚本编程(一)原文:zh.annas-archive.org/md5/c33d6613eafa4d86b92059a00f7aa16f译者:飞龙协议:CCBY-NC-SA4.0前言Python已经发展并扩展了其功能,涵盖了几乎所有可能的IT操作。本书将帮助你利用Python的最新功能,编写有效的脚本,并创建用于管理环境的命......
  • 精通-Python-系统管理脚本编程(四)
    精通Python系统管理脚本编程(四)原文:zh.annas-archive.org/md5/c33d6613eafa4d86b92059a00f7aa16f译者:飞龙协议:CCBY-NC-SA4.0第十六章:网络爬虫-从网站提取有用的数据在本章中,您将学习有关网络爬虫的知识。您还将学习Python中的beautifulsoup库,该库用于从网站提取信息。......
  • 现代-Python-秘籍(六)
    现代Python秘籍(六)原文:zh.annas-archive.org/md5/185a6e8218e2ea258a432841b73d4359译者:飞龙协议:CCBY-NC-SA4.0第九章:输入/输出、物理格式和逻辑布局在本章中,我们将看以下配方:使用pathlib处理文件名使用上下文管理器读写文件替换文件并保留先前版本使用C......
  • Python-GUI-编程(五)
    PythonGUI编程(五)原文:zh.annas-archive.org/md5/9d5f7126bd532a80dd6a9dce44175aaa译者:飞龙协议:CCBY-NC-SA4.0第十二章:使用Canvas小部件可视化数据在数据库中记录了数月的实验数据后,现在是开始可视化和解释数据的过程。你的同事分析师们询问程序本身是否可以创建图形......
  • Python-GUI-编程(一)
    PythonGUI编程(一)原文:zh.annas-archive.org/md5/9d5f7126bd532a80dd6a9dce44175aaa译者:飞龙协议:CCBY-NC-SA4.0前言响应式图形用户界面(GUI)帮助您与应用程序交互,提高用户体验,并增强应用程序的效率。使用Python,您将可以访问精心设计的GUI框架,可以用来构建与众不同的交互......