python memory-management matplotlib

malloc free en python



Crea una figura que sea referencia contada. (2)

Si crea la figura sin usar plt.figure , entonces debe ser una referencia contada como espera. Por ejemplo (esto también está utilizando el backend Agg no interactivo).

from matplotlib.backends.backend_agg import FigureCanvasAgg as FigureCanvas from matplotlib.figure import Figure # The pylab figure manager will be bypassed in this instance. # This means that `fig` will be garbage collected as you''d expect. fig = Figure() canvas = FigureCanvas(fig) ax = fig.add_subplot(111)

Parece que la forma estándar de crear una figura en matplotlib no se comporta como esperaría en python: de forma predeterminada, al llamar a fig = matplotlib.figure() en un bucle se mantendrán todas las figuras creadas, y finalmente se fig = matplotlib.figure() de la memoria.

Hay quite publicaciones que tratan sobre soluciones alternativas, pero requerir llamadas explícitas a matplotlib.pyplot.close(fig) parece un poco pirateado. Lo que me gustaría es una forma sencilla de hacer que fig referencias a las fig contadas, para no tener que preocuparme por las pérdidas de memoria. Hay alguna manera de hacer esto?


Si solo va a guardar figuras en lugar de mostrarlas, puede usar:

def savefig(*args, **kwargs): plt.savefig(*args, **kwargs) plt.close(plt.gcf())

Esto podría decirse que no es menos hacky, pero lo que sea.