Django / Python / PIL / sorl-thumbnail批量生成 - 内存错误
我正在尝试为大约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()