爱电脑的昕宇 发表于 2022-10-14 11:11:47

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

本帖最后由 爱电脑的昕宇 于 2024-6-30 09:38 编辑

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

下载地址
程序简介

这个程序可以实时监测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的计算是通过获取单位时间起始点所有磁盘总写入(读取)量之和并作差,公式大致为
(u为单位时间写入/读取内容大小,D为每个磁盘第二次总读/写量,d为每个磁盘第一次总读/写量)所以程序当有多个储存设备连入系统时,只显示一对曲线。当你拔出某个设备时,磁盘读写数据可能出现一组负数。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()



爱电脑的昕宇 发表于 2022-10-14 15:32:14

本帖最后由 爱电脑的昕宇 于 2022-10-14 15:39 编辑

几点声明:
一、程序开发环境为python3.6,中午在python3.10环境做兼容性测试时发现程序出现无法关闭的bug。使用python3.8+版本的坛友请下载文末提供的兼容版脚本,或exe版本(推荐)
下载链接:exe

二、没有及时提供exe版本,是因为没有准备32位打包环境,没有准备图标,以及上面提到的bug需要解决。


三、exe版本使用32位python3.6打包,无论您的电脑是否安装了python环境、是否已经安装了新版本的python,都可以正常运行。


四、为了兼容新版本的python,我在“for较新版本的python”脚本中加入了一个发射器,运行程序后并不能直接打开折线图画面,如图







所以,强烈推荐您下载exe版本。


PS.倾心设计的程序图标,漂不漂亮{:24:}


FireGuo 发表于 2022-10-14 11:31:40

嗯,要是能打包编成exe就更好了。

0Percent 发表于 2022-10-14 11:33:09

hjr小黄人 发表于 2022-10-14 11:31
嗯,要是能打包编成exe就更好了。

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

爱电脑的昕宇 发表于 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位系统打包程序会又大又卡。

OOO 发表于 2022-10-14 11:52:28

作业写完了?
又有新作!

0Percent 发表于 2022-10-14 13:04:02

OOO 发表于 2022-10-14 11:52
作业写完了?
又有新作!

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

爱电脑的昕宇 发表于 2022-10-14 13:06:45

Ace_qingfeng 发表于 2022-10-14 13:04
hhhh 别刺激他嘛 (我也没写完

哈哈哈我也没写完
话说周五的作业还没留呢,趁着这个真空期……哈哈哈

Pow 发表于 2022-10-14 13:43:40

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

是PyInstaller,也可以用auto-py-to-exe(如果你不懂英文,不过看楼主很懂啊)
页: [1] 2 3 4
查看完整版本: 【有彩蛋!】Python实现简易系统资源监视器 第二版