gpt4 book ai didi

Django pre-shutdown hook 关闭挂起的pymongo连接

转载 作者:行者123 更新时间:2023-12-05 05:28:21 31 4
gpt4 key购买 nike

我在 Django 项目中使用 pymongo,最近我开始遇到一个问题,在退出主 Django 进程(即使通过管理命令)后,pymongo 连接将挂起,并且进程永远不会导出。显然,堆栈中的某个地方出了问题,但目前最好的解决方案似乎是在 Django 退出之前显式关闭连接。

那么:Django 是否为此提供了预关闭信号或 Hook ?

顺便说一句:如果您有兴趣,我的连接代码。

from django.conf import settings
from pymongo import ReplicaSetConnection, ReadPreference

conn = ReplicaSetConnection(
hosts_or_uri=settings.MONGO['HOST'],
replicaSet=settings.MONGO['REPLICASET'],
safe=settings.MONGO.get('SAFE', False),
journal=settings.MONGO.get('JOURNAL', False),
read_preference=ReadPreference.PRIMARY
)

db = getattr(conn, settings.MONGO['DB'])

(出于好奇,这是在 pymongo 中进行连接池的正确方法吗?)

最佳答案

虽然这不能解决您的问题,但挂起是在 2012 年 7 月提交给 pymongo 时引入的:https://github.com/mongodb/mongo-python-driver/commit/1fe6029c5d78eed64fcb2a6d368d9cdf8756d2f4#commitcomment-1820334 .

具体来说,它只影响 ReplicaSetConnections。他们给出的答案是调用 connection.close(),但正如您在问题中正确指出的那样,没有关闭连接的好钩子(Hook)。

我相信您可以在每次请求结束时安全地关闭连接。 Django 已经为它与数据库的 ORM 连接做了这个。这就是为什么他们推荐使用像 pgbouncer 这样的连接池,所以重新连接到 postgres 是即时的。 Pymongo 内置了一个连接池,所以可以随意重新连接。

关于Django pre-shutdown hook 关闭挂起的pymongo连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11847418/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com