【问题标题】:Release memory when working with PIL使用 PIL 时释放内存
【发布时间】:2012-07-03 19:30:01
【问题描述】:

我正在使用 PIL(Python 图像库)编辑图像。在每一步(转换、旋转、调整大小......)都会创建更多图像。 (文档摘录:“返回旋转给定度数的图像的副本......”)所以我想释放内存。

你知道下面的方法是否节省内存吗?

import PIL.Image

image = PIL.Image.open('Image.jpg')
garbage = image
image = image.convert('RGB')
del garbage

【问题讨论】:

    标签: python rotation garbage-collection python-imaging-library


    【解决方案1】:

    您不需要创建临时的garbage 引用。

    当这条语句的右边被执行时:

    image = image.convert('RGB')
    

    创建了一个新的 Python 对象。

    通过将其分配回imageimage 用来表示的旧对象的引用计数减少到零,并被发送到垃圾收集器。

    但是,与 Python 的工作方式无关,我看到了 PIL 问题,由于真正的错误,内存泄漏已经形成。例如,这里讨论了使用 Draw text 时的问题:

    PIL Draw Text Memory Leak

    我知道这是一个非常古老的讨论,但我仍然看到有时在我使用 PIL 时出现!

    【讨论】:

    • 我知道 Python 的垃圾收集器。我问是因为我使用大小为 5 MB 或更大的图像。执行某些任务会占用大量内存,因为创建了许多图像。所以我想尽快释放内存。 +++ 会不会是 Python 的垃圾收集器释放内存太晚了,以至于同时其他程序被告知它们的空间太少了?
    • 您是否也在使用 PIL Image Draw 对象?
    • 是的,我用它在图像上绘制带有 TrueType 字体的文本。
    • 注释掉图像绘制的东西并重新运行你的应用程序。我打赌你会看到你的内存泄漏消失了。
    • 我不明白你的意思。我的想法并不特定于我所知道的现有问题。你推荐给del字体和绘图对象吗?
    猜你喜欢
    • 2011-11-16
    • 1970-01-01
    • 1970-01-01
    • 2011-10-28
    • 2017-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-07-10
    相关资源
    最近更新 更多