2

我正在尝试为我的 django 应用程序使用sorl-thumbnail为大约 40k 图像中的每一个批量生成 4 个缩略图。我使用 ImageWithThumbnailsFieldFile 遍历所有 django 对象,然后调用它的 generate_thumbnails() 函数。

这工作得很好,除了在几百次迭代之后,我的内存用完了,我的循环因“内存错误”而崩溃。由于 sorl-thumbnail 使用 PIL 生成拇指,因此 PIL 似乎不会返回它在生成拇指时使用的所有内存。

有人如何避免这个问题,例如通过强制 PIL 返回它不再需要的内存?

我的代码看起来像这样:

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

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

提前感谢您的任何建议!

马丁

4

1 回答 1

4

您的问题与 Django 在遍历查询集时如何缓存查询集的结果有关。Django 将所有对象保存在内存中,这样下次您遍历同一个查询集时,您不必再次访问数据库来获取所有数据。

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

all = Picture.objects.all().iterator()
for i in all:
    i.image.generate_thumbnails()
于 2009-11-26T19:35:07.050 回答