построение монитора процессора python требует слишком много ресурсов процессора для построения графиков с помощью matplotlib - PullRequest
0 голосов
/ 07 сентября 2018

Мониторинг всех процессоров проходит нормально, но при построении графиков для всех процессоров 1 процессор загружается на 75% для этого Matplotlib с анимированными графиками.

Я пытался улучшить черчение

linelist[v].set_ydata(ylist[v])
fig.canvas.draw()
fig.canvas.flush_events()

как объяснено на: https://bastibe.de/2013-05-30-speeding-up-matplotlib.html

Полный код:

import psutil
import matplotlib.pyplot as plt
import matplotlib.animation as animation
import time
from pylab import *
import numpy as np

fig = plt.figure()
cpu_total = psutil.cpu_count()
subplots_adjust(hspace=0.000)
number_of_subplots=cpu_total
x_total = 60

x = [i for i in range(x_total)]
ylist =[[0]*x_total for i in range(number_of_subplots)]

linelist=[]
for i,v in enumerate(xrange(number_of_subplots)):
    ax1 = subplot(number_of_subplots,1,v+1) # v+1 plots start with 1
    ax1.set_ylim([0, 100])
    ax1.grid()
    line, = ax1.plot(x, ylist[v])
    linelist.append(line)
plt.grid(True)

def cpumonitor(i):
    interval = None
    cpu_perc= psutil.cpu_percent(interval, percpu=True)
    if len(x)>=x_total:
        for yitem in ylist:
            yitem.pop(0)
    else:
        x.append(i)
    for item in range(number_of_subplots):
        ylist[item].append(cpu_perc[item])
    for i,v in enumerate(xrange(number_of_subplots)):
        linelist[v].set_ydata(ylist[v])
    fig.canvas.draw()
    fig.canvas.flush_events()

ani = animation.FuncAnimation(fig, cpumonitor)
plt.show()
...