本版
查看: 14692|回复: 31

【有彩蛋!】Python实现简易系统资源监视器 第二版

[复制链接]

[Lv.8]超级萝卜

楼主(1#)
发表于 2022-10-14 11:11:47 | 只看该作者 |只看大图 |倒序浏览 |阅读模式
本帖最后由 爱电脑的昕宇 于 2024-6-30 09:38 编辑

第二版新增:
1、磁盘与网络IO支持MB与KB间的换算(仅当程序运行30秒以上时有效)

[/size]下载地址
程序简介


这个程序可以实时监测CPU利用率、内存占用、磁盘IO以及网络IO。程序自动强制位于所有窗口顶层,方便观察数据。当然,也可以最小化。
你甚至可以导出图表为图片文件。只要点击下方按钮栏的保存按钮就可以了。


兼容性信息


.exe版支持32位或64位的Windows7及以上操作系统(需要VC运行库)
.py脚本借助Python运行环境可以运行在Windows2000及以上版本的操作系统,以及Linux/MacOS

已知问题与程序局限性

1、磁盘与网络部分单位无法改变。磁盘读写只能以MB为单位,网络传载只能以KB为单位。
2、主页面的图例使用了歪果仁的语言,因为pylab包不支持中文。
3、x轴单位问题。由于作品逻辑缺陷以及硬件性能的差异,单位时间可能随程序运行由初始的0.8秒变长。但是当单位时间增长到1秒时会停止变化。
4、磁盘IO的计算是通过获取单位时间起始点所有磁盘总写入(读取)量之和并作差,公式大致为
[size=10.5pt] [/size]
[size=10.5pt](u为单位时间写入/读取内容大小,D为每个磁盘第二次总读/写量,d为[/size]每个磁盘第一次总读/写量)
所以程序当有多个储存设备连入系统时,只显示一对曲线。当你拔出某个设备时,磁盘读写数据可能出现一组负数。
5、注意:较新版本的python运行此程序的核心部分会出现无法关闭的错误,如果您使用的是python3.8以上的版本,请下载文末标有“for 较新版本的python”的脚本,或下载exe版本。

截图






以下是我的源码的核心部分(话说PyCharm真是强大,我直接把代码复制过来还给我上色了):
import matplotlib.pyplot as plt
import psutil

plt.ion()
plt.figure(1)

t_list = []
cpu_list = []
mem_list = []
disk_read = []
disk_read_bt = []
disk_written = []
disk_written_bt = []
net_sent = []
net_sent_bt = []
net_recv = []
net_recv_bt = []

t = 0 # 时间初始化

while True:
plt.subplot(1, 2, 1) # 第一部分
print(t_list)
a = psutil.cpu_percent() # 获取CPU与内存占用信息
b = (psutil.virtual_memory()[2])
cpu_list.append(a) # 将数据加入列表
mem_list.append(b)
t_list.append(t) # 刷新时间
t = t + 1
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, cpu_list, c='r', ls='-', marker=',', mec='b', mfc='w', label='CPU') # 绘制图像
plt.plot(t_list, mem_list, c='b', ls='-', marker=',', mec='b', mfc='w', label='Memory')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.xlabel('time')
plt.ylabel('percent')
plt.title('Performance')
plt.grid()

plt.subplot(2, 2, 2) # 第二部分
c = (psutil.disk_io_counters()[2])
e = (psutil.disk_io_counters()[3])
disk_read.append(c)
disk_written.append(e)
d = (disk_read[len(disk_read) - 1] - disk_read[len(disk_read) - 2]) / 1048576
f = (disk_written[len(disk_written) - 1] - disk_written[len(disk_written) - 2]) / 1048576
disk_read_bt.append(d)
disk_written_bt.append(f)
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, disk_read_bt, c='y', ls='-', marker=',', mec='b', mfc='w', label='Disk read')
plt.plot(t_list, disk_written_bt, c='y', ls='-.', marker=',', mec='b', mfc='w', label='Disk written')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.ylabel('MB')
plt.title('Disk and Network')
plt.grid()

plt.subplot(2, 2, 4) # 第三部分
g = (psutil.net_io_counters()[0])
i = (psutil.net_io_counters()[1])
net_sent.append(g)
net_recv.append(i)
h = (net_sent[len(net_sent) - 1] - net_sent[len(net_sent) - 2]) / 1024
j = (net_recv[len(net_recv) - 1] - net_recv[len(net_recv) - 2]) / 1024
net_sent_bt.append(h)
net_recv_bt.append(j)
plt.subplots_adjust(wspace=0.3, left=0.1, right=0.95)
plt.plot(t_list, net_sent_bt, c='g', ls='-', marker=',', mec='b', mfc='w', label='Net sent')
plt.plot(t_list, net_recv_bt, c='g', ls='-.', marker=',', mec='b', mfc='w', label='Net received')
if t == 1 or t > 31: # 加入组件
plt.legend(loc='lower left')
plt.ylabel('KB')
plt.xlabel('time')
plt.grid()

plt.pause(0.5) # 移动并刷新折线
if t > 30:
del (t_list[0])
del (cpu_list[0])
del (mem_list[0])
del (disk_read[0])
del (disk_read_bt[0])
del (disk_written[0])
del (disk_written_bt[0])
del (net_sent[0])
del (net_sent_bt[0])
del (net_recv[0])
del (net_recv_bt[0])
plt.clf()




https://img.picui.cn/free/2025/05/25/6832f9d6d564b.jpg
回复

支持 | 反对  0 支持 / 0 反对 评分 举报

[Lv.5]胡萝卜

沙发(2#)
发表于 2022-10-14 11:31:40 | 只看该作者
嗯,要是能打包编成exe就更好了。

[Lv.7]特大萝卜

You're the {css} to my html.

板凳(3#)
发表于 2022-10-14 11:33:09 | 只看该作者
hjr小黄人 发表于 2022-10-14 11:31
嗯,要是能打包编成exe就更好了。

打包简单
Python有一个库 专门是打包exe的
楼主可以百度下
Ace_qingfeng
Qingfeng_129

[Lv.8]超级萝卜

地板(4#)
 楼主| 发表于 2022-10-14 11:43:47 | 只看该作者
本帖最后由 爱电脑的昕宇 于 2022-10-14 11:45 编辑
Ace_qingfeng 发表于 2022-10-14 11:33
打包简单
Python有一个库 专门是打包exe的
楼主可以百度下

那我打包一下,但是EXE应该挺大的
我之前打包EXE用的Windows7 32位环境坏了,我还得再装一个,要是用64位系统打包程序会又大又卡。
https://img.picui.cn/free/2025/05/25/6832f9d6d564b.jpg

Super Moderator

需站内投广、测品等,请走站内信联系我。

5#
发表于 2022-10-14 11:52:28 来自手机 | 只看该作者
作业写完了?
又有新作!

[Lv.7]特大萝卜

You're the {css} to my html.

6#
发表于 2022-10-14 13:04:02 | 只看该作者
OOO 发表于 2022-10-14 11:52
作业写完了?
又有新作!

hhhh 别刺激他嘛 (我也没写完
Ace_qingfeng
Qingfeng_129

[Lv.8]超级萝卜

7#
 楼主| 发表于 2022-10-14 13:06:45 | 只看该作者
Ace_qingfeng 发表于 2022-10-14 13:04
hhhh 别刺激他嘛 (我也没写完

哈哈哈我也没写完
话说周五的作业还没留呢,趁着这个真空期……哈哈哈
https://img.picui.cn/free/2025/05/25/6832f9d6d564b.jpg

[Lv.4]白萝卜

8#
发表于 2022-10-14 13:43:40 | 只看该作者
爱电脑的昕宇 发表于 2022-10-14 11:43
那我打包一下,但是EXE应该挺大的
我之前打包EXE用的Windows7 32位环境坏了,我还得再装一个,要是用64位 ...

是PyInstaller,也可以用auto-py-to-exe(如果你不懂英文,不过看楼主很懂啊)

联系我们(Contact)|手机版|萝卜头IT论坛 ( 苏ICP备15050961号-1 )

GMT+8, 2026-10-19 21:52 , Processed in 0.07 second(s), 20 queries , Gzip On.

快速回复 返回顶部 返回列表