在大容量内存中生成Django/Python/PIL/sorlthumbinal

2024-10-02 12:28:47 发布

您现在位置:Python中文网/ 问答频道 /正文

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

这一切都很好,只是在几百次迭代之后,内存耗尽,循环崩溃,出现“内存错误”。由于sorl thumbnail使用PIL来生成thumbs,因此PIL似乎没有返回在生成thumb时使用的所有内存。在

有没有人可以避免这个问题,例如通过强迫PIL返回它不再需要的内存?在

我的代码如下所示:

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

函数generate thumbnail从here,第129行开始。在

提前谢谢你的建议!在

马丁


Tags: 对象django函数内存图像应用程序pil批量
1条回答
网友
1楼 · 发布于 2024-10-02 12:28:47

您的问题与Django如何在循环查询集的结果时缓存它们有关。Django将所有对象保存在内存中,以便下次迭代相同的查询集时,不必再次访问数据库来获取所有数据。在

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

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

相关问题 更多 >

    热门问题