创建一个引用计数的数字

时间:2013-05-02 09:29:04

标签: python memory-management matplotlib

似乎在matplotlib中创建图形的标准方式不像我在python中所期望的那样:默认情况下,在循环中调用fig = matplotlib.figure()将保留所有创建的图形,并最终运行内存不足。

quite a few个帖子处理变通办法,但要求对matplotlib.pyplot.close(fig)进行显式调用似乎有些过时。我想要的是一个简单的方法来计算fig引用,所以我不必担心内存泄漏。有办法做到这一点吗?

2 个答案:

答案 0 :(得分:26)

如果您在不使用plt.figure的情况下创建数字,则应按预期计算引用次数。例如(这也是使用非交互式Agg后端。)

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)

答案 1 :(得分:3)

如果你只是保存数字而不是显示它们,你可以使用:

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

这可以说也不过是hacky,不管怎样。