9

Django 1.6 引入了持久连接功能。但是我注意到退出使用 django 的 ORM 的脚本至少会在数据库端打开一些连接。
设置:django 6.0、postgres 9.2 和 psycopg2 2.5.1。

如何从脚本优雅地关闭与数据库的连接?

警告部分提到django为每个线程打开一个连接,所以在多线程脚本中,django是否为每个线程创建一个连接,即使对于不访问数据库的线程也是如此?
每个线程是否需要单独关闭数据库连接?

如果上述两个问题的答案都是肯定的,那么您可以用在脚本退出时不加入的守护线程(例如,用于 comm)做什么?

4

2 回答 2

7

我刚才也遇到了同样的问题...

当我的线程退出时,通过调用以下代码来解决它:

from django.db import close_old_connections
close_old_connections()
于 2013-11-27T13:52:20.910 回答
5

我刚刚升级并close_old_connections在启动子进程之前在主进程中出现了这个问题,它不像旧的close_connections那样为每个进程提供自己的连接。但是,如果您查看了close_connections做什么用,您可以重新创建它docs

所以我在创建子流程之前在我的主流程中执行此操作。

from django.db import connections
for conn in connections.all():
    conn.close()

而且效果很好。新的close_old_connections只会在连接过期或消失时关闭连接。

于 2015-09-16T16:36:52.883 回答