【问题标题】:closing db connection with django's persistent connection in a multi-threaded script在多线程脚本中关闭与 django 持久连接的 db 连接
【发布时间】:2013-12-02 05:46:52
【问题描述】:

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

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

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

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

【问题讨论】:

  • 嗨,我正在使用类似的设置,并且遇到了相同的摇晃连接问题。你找到解决这个问题的方法了吗?

标签: django multithreading persistent-connection connection-close


【解决方案1】:

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

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

from django.db import close_old_connections
close_old_connections()

【讨论】:

  • 这个答案不涉及多线程的复杂性
【解决方案2】:

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

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

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

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

【讨论】:

    猜你喜欢
    • 2020-01-12
    • 2018-10-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多