在DEBUG为False时,非Web脚本使用Django时需要django.db.reset_queries吗?
我有一个脚本在不停地运行(用的是for循环和time.sleep)。它在加载Django后会对模型进行查询。在Django的设置里,调试模式是关闭的。不过,我发现这个进程会越来越占用内存。在我的time.sleep(5)之前,我加了一行代码来调用django.db.reset_queries()。
这个很小的内存泄漏(每次几K)几乎停止了,问题似乎解决了。但是,我还是搞不懂为什么这样做能解决问题,因为当我查看reset_queries的功能时,它似乎是清空了每个连接中的查询列表,也就是connections.all().queries。当我尝试输出这些查询列表的长度时,发现它是0。所以reset_queries()这个方法似乎是在清空已经是空的列表。
那为什么它还是有效呢?我知道无论DEBUG是否为True,使用mod wsgi时都会运行reset_queries()。
谢谢,
1 个回答
4
在运行调试工具后,我发现对于一个非网页的 Python 脚本,如果使用 Django 来进行查询,确实需要调用 reset_queries()。在每次循环中进行查询时,我发现即使 DEBUG 设置为 False,查询的字符串表示还是会被添加到 connections.all() 中的查询列表里。