I have been using the matplotlib animation functions to display some real-time data. After running for a few minutes I noticed the memory used by python kept creeping up and up. I decided to go back to some of the animation examples and see if they have the same problem on my computer.
When I use the animate_decay.py example and change repeat from False to True, I can simulate the same problem my real-time data program exhibits. Here is the code with the one change.
import numpy as np
import matplotlib.pyplot as plt
import matplotlib.animation as animation
def data_gen(t=0):
cnt = 0
while cnt < 1000:
cnt += 1
t += 0.1
yield t, np.sin(2*np.pi*t) * np.exp(-t/10.)
def init():
ax.set_ylim(-1.1, 1.1)
ax.set_xlim(0, 10)
del xdata[:]
del ydata[:]
line.set_data(xdata, ydata)
return line,
fig, ax = plt.subplots()
line, = ax.plot([], [], lw=2)
ax.grid()
xdata, ydata = [], []
def run(data):
# update the data
t, y = data
xdata.append(t)
ydata.append(y)
xmin, xmax = ax.get_xlim()
if t >= xmax:
ax.set_xlim(xmin, 2*xmax)
ax.figure.canvas.draw()
line.set_data(xdata, ydata)
return line,
ani = animation.FuncAnimation(fig, run, data_gen, blit=False, interval=10,
repeat=True, init_func=init, save_count=0)
plt.show()
I'm using a Mac (OS X 10.10) and watch the memory python uses via Activity Monitor. As the animation repeats over and over again, python is grabbing more and more memory. After several minutes python was using more than 300Mb.
This problem is similar to the question at: Memory usage for matplotlib animation But was not answered.
I have tried inserting garbage collection in the run function, but this did not help. I have also tried matplotlib with python 2.7 and python 3.5 with the same results. Any further suggestions? Is this behavior expected?