Django / Python / PIL / sorl-thumbnail批量生成 - 内存错误

2 投票
1 回答
1543 浏览
提问于 2025-04-15 16:25

我正在尝试为大约4万张图片批量生成4个缩略图,使用的是sorl-thumbnail这个库,来为我的django应用程序服务。我遍历所有带有ImageWithThumbnailsFieldFile的django对象,然后调用它的generate_thumbnails()函数。

这个方法运行得很好,但在处理几百张图片后,我的内存就不够用了,循环崩溃,出现了'memory error'的错误。因为sorl-thumbnail使用PIL来生成缩略图,所以看起来是PIL在生成缩略图后没有释放它所占用的内存。

有没有人知道怎么解决这个问题,比如强制PIL释放它不再需要的内存?

我的代码大致是这样的:

all = Picture.objects.all()
for i in all:
    i.image.generate_thumbnails()

generate-thumbnail这个函数从这里开始,位于第129行。

提前感谢任何建议!

马丁

1 个回答

4

你的问题和Django是如何缓存查询结果有关。当你遍历查询结果时,Django会把所有的对象都保存在内存中,这样下次再遍历同样的查询结果时,就不需要再去数据库获取数据了。

你需要做的是使用iterator()这个方法。所以:

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()

撰写回答