memory-leaks - matplotlib imshow 中的内存泄漏

标签 memory-leaks matplotlib

我在 matplotlib.imshow 中发现了内存泄漏。我知道类似的问题(如 Excessive memory usage in Matplotlib imshow )并且我已经阅读了相关的 Ironpython 线程( https://github.com/ipython/ipython/issues/1623/ )。

我相信下面的代码应该(在没有内存泄漏的情况下)在运行时消耗恒定数量的内存。相反,它随着每次迭代而增长。

我正在运行我能找到的最新版本(matplotlib-1.2.0rc3.win32-py2.7 和 numpy-1.7.0.win32-py2.7),但问题仍然存在。我没有保留 imshow 的返回值,实际上我明确删除了它,所以我认为 IronPython 讨论中的注释不适用。无论是否在循环内显式赋值和删除,行为都是相同的。

我看到 matplotlib-1.2.0.win32-py2.7 的行为相同。

每次迭代似乎都卡在图像所需的任何内存上。我有
选择了一个大的 (1024x1024) 随机矩阵来使每个图像的大小有趣地大。

我正在运行带有 2G 物理 RAM、32 位 python2.7.3(因此出现内存错误)以及上述 numpy 和 matplotlib 包的 Win7 pro。下面的代码在迭代 440 左右时因内存错误而失败。 windows 任务管理器在失败时报告消耗了 1,860,232K。

这是演示泄漏的代码:

IMAGE_SIZE = 1024
import random
RANDOM_MATRIX = []
for i in range(IMAGE_SIZE):
    RANDOM_MATRIX.append([random.randint(0, 100) for each in range(IMAGE_SIZE)])

def exercise(aMatrix, aCount):
    for i in range(aCount):
        anImage = imshow(aMatrix, origin='lower left', vmin=0, vmax=100)
        del(anImage)

if __name__=='__main__':
    from pylab import *
    exercise(RANDOM_MATRIX, 4096)

我大概可以用 PIL 而不是 matplotlib 来渲染图像。在没有解决方法的情况下,我确实认为这是 matplotlib 的阻碍。

最佳答案

我努力使它工作,因为许多帖子都在谈论这个问题,但似乎没有人关心提供一个工作示例。
首先,你不应该使用 from ... import *语法,当使用一个不是你自己创建的库时——因为,你永远不能确定它没有声明一个与你的冲突的符号。
然后,调用set_data不足以解决这个问题 - 出于三个原因:

  • 你没有提到这个 set_data 是从哪里调用的。它不是一个
    普通函数,但来自对象的方法......哪个对象?
  • 如果您没有东西可做,仅 set_data 是不够的
    “激活”更改。有时它会透明地发生
    因为另一个情节激活了它,但如果没有,你将需要
    调用flush_events()自己。
  • 未调用 imshow() 设置数据无效有它的值(value)
    可以用来设置它的颜色图。

  • 这是一个可行的解决方案(link):

    关于memory-leaks - matplotlib imshow 中的内存泄漏,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15345336/

    相关文章:

    ios - 追踪低内存警告的根本原因

    Delphi 内存问题 (FastMM4)

    python - 如何在 Seaborn FacetGrid 中制作正方形热图

    python - 帮助使大的子图看起来更好更清晰

    python - FacetGrid 轴跨行共享 x 轴/跨列共享 y 轴

    c - valgrind 对 execvp 大小 1 的无效读取

    objective-c - 将 KVO 观察器添加到 self 会导致内存泄漏吗?

    javascript - 用我的代码防止内存泄漏

    python - matplotlib 对 x Axis 的值进行分组

    python - imshow 带有整数轴标签的图