在多线程脚本中使用django的持久连接关闭数据库连接

Jon*_*han 6 django multithreading persistent-connection connection-close

Django 1.6引入了持久连接功能.但是我注意到退出使用django的ORM的脚本至少留下了一些在db端打开的连接.
设置:django 6.0,postgres 9.2和psycopg2 2.5.1.

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

警告部分提到,Django的打开每个线程的连接,因此在多线程的脚本,并创造Django的每个线程的连接,即使不访问数据库的主题?
每个线程是否需要单独关闭数据库连接?

如果上述两个问题的答案都是肯定的,那么对于不在脚本退出时加入的守护程序线程(例如comm),你能做些什么呢?

小智 5

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

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

from django.db import close_old_connections
close_old_connections()
Run Code Online (Sandbox Code Playgroud)

  • 这个答案不涉及多线程的复杂性 (2认同)

byo*_*ngb 5

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

所以我在创建我的子流程之前在我的主流程中这样做。

from django.db import connections
for conn in connections.all():
    conn.close()
Run Code Online (Sandbox Code Playgroud)

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