使用FuncAnimation进行Pyplot动画内存泄漏

时间:2017-04-21 17:33:56

标签: python matplotlib memory-leaks

我使用带有FuncAnimation的pyplot 2.0将串行数据流式传输到不断更新的数字。

要使FuncAnimation正常工作,您需要 Func (每帧调用的功能)和(数据源)传递func和动画的每一帧相当简单,我认为它确实以我期望的方式制作动画。

然而,即使我将 blit 标志设置为优化绘图并仅渲染新数据点,该图仍会继续摧毁内存,直到它崩溃Raspberry Pi。

以下是代码:

import matplotlib.pyplot as plt
import matplotlib.animation as animation

# Setup plotting, one figure and two subplots
fig, (ax1, ax2) = plt.subplots(2,1)#,sharex=True)
g_line = ax1.plot([],[],'g')
r_line = ax1.plot([],[],'r')

lines = []
# Add each line to o ur tuples of lines to be plotted
lines.extend(g_line)
lines.extend(r_line)

# Data plotting function, this is call from the animation
# Each data element is in the data list being returned below
def plot_data(data):
  x1 = data[0]; y1 = data[1]; 
  x2 = data[2]; y2 = data[3]; 

  lines[0].set_data(x1,y1)              # Audio - green
  lines[1].set_data(x2,y2)              # Audio thresh - red
  return tuple(lines)

def data_gen():
  my_list = []
  my_list2 = []

  # Main infinite loop for processing of serial data
  while True:
    # Grab input RX serial data
    (my_list, my_list2) = readUART(serReader)

    yield my_list, my_list2
  #end while

ani = animation.FuncAnimation(fig, plot_data, data_gen, interval=1, blit=True)
plt.show()

我试图在每次迭代后清除图形,但这会严重降低渲染速度。

是否有一些记忆,即使绘图完全填满图形并离开屏幕,我也不知道每次绘图时都会抓住它?

注意 - 我在整个程序中运行了一个内存分析器,减去了绘图,只是在while TRUE循环上运行了,内存在我让它一直移动超过55mb时运行

0 个答案:

没有答案