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

时间:2013-11-18 21:44:55

标签: django multithreading persistent-connection connection-close

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

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

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

如果上述两个问题的答案都是肯定的,那么你可以对守护程序线程(例如comm)进行什么操作呢?

2 个答案:

答案 0 :(得分:5)

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

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

from django.db import close_old_connections
close_old_connections()

答案 1 :(得分:2)

我刚升级并且在启动子流程之前在主流程中出现了close_old_connections并不像旧的close_connections那样为每个流程提供自己的连接。但是,如果您查看close_connections使用的内容,可以重新创建docs

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

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

它很棒。新的close_old_connections只会在连接已过期或已离开时关闭连接。