我正在尝试使用 sorl-thumbnail 为大约 4 万张图片中的每一张批量生成 4 个缩略图对于我的 Django 应用程序。我使用 ImageWithThumbnailsFieldFile 遍历所有 Django 对象,然后调用其 generate_thumbnails() 函数。
这工作正常,除了在几百次迭代后,我的内存不足并且我的循环因“内存错误”而崩溃。由于 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()
