PYTHON通过psutil模块实时监测cpu、内存、网速运行情况 您所在的位置:网站首页 python监控程序流量 PYTHON通过psutil模块实时监测cpu、内存、网速运行情况

PYTHON通过psutil模块实时监测cpu、内存、网速运行情况

2023-06-05 03:11| 来源: 网络整理| 查看: 265

PYTHON通过psutil模块实时监测cpu、内存、网速运行情况

运行多线程以后,随着设置更多的线程数,运行效率并没提升,一定是遇到了瓶颈,到底是CPU、内存还是网速到了上限?做了个实时监测,看看多线程的资源消耗情况吧。

一、安装psutil

pip install psutil即可。

二、初步学习psutil

import psutil as p

1.cpu

p.cpu_times()

这些时间是系统累计数,实时监测需要计算差值。

这里我们用p.cpu_percent()取出百分比。

2.内存

我们用p.virtual_memory().percent得到百分比。

3.网速

得到的发送和接收数,也是统计数,需要计算差值。

三、思路

cpu、内存就取使用的百分比作为指示,因为同是百分比,放在一个图中;网速取单位时间接收到的字节数,转化为对应带宽(直观)作为指示,新增第二个图。显示监测的窗口增加了置顶功能。

四、代码

# CPU、内存、网速实时监控

import matplotlib.pyplot as plt import matplotlib.font_manager as font_manager import psutil as p import win32gui,win32con

def show():#增加窗口置顶功能     global hwnd     #win32gui.SetForegroundWindow (hwnd)#这句好象不行     win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0,0,500,400, \                           win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE| \                           win32con.SWP_NOOWNERZORDER|win32con.SWP_SHOWWINDOW)

POINTS = 300 fig, ax = plt.subplots(2,facecolor='#FFDAB9')#设置上下两个图、面板色。#,edgecolor='#7FFF00'好象无效 fig.canvas.set_window_title(u'电脑性能(cpu、内存、网速)实时监测')#设置窗口标题 fig.canvas.toolbar.destroy()#取消工具栏 fig.canvas.callbacks.callbacks.clear()#清除回调信息

#ax为列表,分别设置 ax[0].set_ylim([0, 100]) ax[0].set_xlim([0, POINTS]) ax[0].set_autoscale_on(False) ax[0].set_xticks([]) ax[0].set_yticks(range(0, 101, 20)) #ax[0].set_facecolor('#A9A9A9')#可设置底色,支持'black')#matplotlib颜色分层设置 ax[0].grid(True)

ax[1].set_ylim([-5, 50])#设置0线上浮 ax[1].set_xlim([0, POINTS]) ax[1].set_autoscale_on(False) ax[1].set_xticks([]) ax[1].set_yticks(range(0, 51, 10)) ax[1].grid(True)

# 设置CPU、内存横坐标数据位 cpu = [None] * POINTS mem=[None] * POINTS # 设置接收字节(下载)横坐标数据位 down = [None] * POINTS #设置第一个图 cpu_l, = ax[0].plot(range(POINTS), cpu, label='Cpu%') mem_l, = ax[0].plot(range(POINTS), mem, label='Mem%') ax[0].legend(loc='upper center', ncol=4, prop=font_manager.FontProperties(size=10))#打标 #设置第二个图 down_l, = ax[1].plot(range(POINTS), down, label='Down(M)') ax[1].legend(loc='upper center', ncol=4, prop=font_manager.FontProperties(size=10))

before =p.net_io_counters().bytes_recv#获取网络字节数 #把查找窗口句柄放在这里,不在SHOW()里, hwnd=win32gui.FindWindow(None,u'电脑性能(cpu、内存、网速)实时监测')#查找本窗口句柄 print(hwnd)#调试用 #把win32gui.SetWindowPos(放在这里不行列。

def get_delta():#获取下载变化值     global before     now = p.net_io_counters().bytes_recv     delta = (now-before)/102400#变成K再除100,大致相当于多少M宽带。     before = now     return  delta #返回改变量   def OnTimer(ax):     global cpu, mem, down     show()     tmp = get_delta()#得到下载字节数的变化值     cpu_p=p.cpu_percent()#读取CPU使用百分比     cpu = cpu[1:] + [cpu_p]#加入到数据末尾     mem_p=p.virtual_memory().percent#读取内存使用百分比     mem =mem[1:] + [mem_p]#加入到数据末尾     cpu_l.set_ydata(cpu)#设置新数据     mem_l.set_ydata(mem)#设置新数据          down = down[1:] + [tmp]     down_l.set_ydata(down)#设置新数据 ###下面这部分可以忽略 ##    while True: ##        try: ##            ax.draw_artist(cpu_l) ##            ax.draw_artist(mem_l) ##            ax.draw_artist(down_l) ##            break ##        except: ##            pass     ax.figure.canvas.draw()#刷新画布     def start_monitor():     timer = fig.canvas.new_timer(interval=1000)#1秒刷新一次     timer.add_callback(OnTimer, ax[1])#只加一个即可     #timer.add_callback(OnTimer, ax[0])     timer.start()     plt.show()     if __name__ == '__main__':    start_monitor() 五、运行结果

右边为开启多线程(网络应用)监测情况,cpu、内存基本上达到了满负荷状态。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有