Python:调整图像大小时的内存泄漏

时间:2015-09-03 13:34:12

标签: python linux python-3.x memory-leaks pillow

我正在开发一个python程序,它通过requests获取图像,当时显示五个,每次更新一个给定的间隔。一个单独的线程负责偶尔使用新图像更新队列。 它应该运行在覆盆子pi(带有.5gb ram的原始模型b)上运行raspbian(debian wheezy)。

我在python3中写这个并使用TKinter,Pillow和request。

它在我的Windows开发机器上工作得很好。它在pi上运行良好,但过了一段时间它在更新屏幕上的图像时变慢,最终它被linux杀死。检查/ var / log / syslog显示它被杀死是因为系统内存不足。

在Windows上运行它,我在任务管理器中注意到,每次更新屏幕图像时,内存使用量会增加〜1mb。在调试模式中单步执行代码,我可以看到内存使用量的增加发生在以下函数中:

def resize(self, img, width, height):
    img = img.resize((width, height), Image.ANTIALIAS)
    tkimg = ImageTk.PhotoImage(img)
    return tkimg

似乎img对象悬而未决。 所以我的问题是:当我将调整大小的图像分配给同一个变量时,为什么会出现这种情况?垃圾收集器不应该自动处理吗?

任何帮助表示赞赏!

修改
while True中包含罪魁祸首行,内存使用量随着每次传递而增加。当使用新的img作为参数调用函数时,似乎只会增加。

    while True:
        img = img.resize((width, height), Image.ANTIALIAS)
        tkimg = ImageTk.PhotoImage(img)

将已分配给TKinter标签后删除返回的img对象似乎也没有任何效果。

0 个答案:

没有答案