2009-11-26 33 views
2

我试图为我的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

感谢您的咨询!

马丁

回答

4

你的问题涉及到Django是如何将缓存查询集的结果,当您遍历它们。 Django将所有对象保留在内存中,以便下次迭代相同的查询集时,不必再次访问数据库以获取所有数据。

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

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

感谢您的回答,它就像一个魅力,我觉得你的代码应改为:所有= Picture.objects..iterator() – Hoff 2009-11-26 19:51:39

+0

更新 - 对不起,我想我离开的最重要部分。 – sheats 2009-11-26 20:04:41