批量生成Django/Python/PIL/sorl-thumbnail代码 - 内存错误
问题描述:
我试图为我的django应用程序为大约40k图像的每个批量生成4个thumnails,其中sorl-thumbnail。我用ImageWithThumbnailsFieldFile迭代所有的django对象,然后调用它的generate_thumbnails()函数。批量生成Django/Python/PIL/sorl-thumbnail代码 - 内存错误
这工作正常,除了几百次迭代后,我用尽内存和我的循环崩溃与'内存错误'。由于sorl-thumbnail使用PIL来生成大拇指,因此似乎是PIL在生成拇指时不会返回所使用的所有内存。
是否有人如何避免这个问题,例如通过强制PIL返回不再需要的内存?
我的代码只是看起来像这样:
all = Picture.objects.all()
for i in all:
i.image.generate_thumbnails()
功能生成缩略图开始here,行提前129
感谢您的咨询!
马丁
答
你的问题涉及到Django是如何将缓存查询集的结果,当您遍历它们。 Django将所有对象保留在内存中,以便下次迭代相同的查询集时,不必再次访问数据库以获取所有数据。
你需要做的是使用iterator()方法。所以:
all = Picture.objects.all().iterator()
for i in all:
i.image.generate_thumbnails()
感谢您的回答,它就像一个魅力,我觉得你的代码应改为:所有= Picture.objects..iterator() – Hoff 2009-11-26 19:51:39
更新 - 对不起,我想我离开的最重要部分。 – sheats 2009-11-26 20:04:41