Django的关机前的钩挂关闭连接pymongo(Django pre-shutdown hook

2019-07-30 20:25发布

我使用pymongo在Django项目,最近我已经开始运行到一个问题,即在离开主Django的过程中(即使是通过管理命令)的pymongo连接将挂起,并且进程将永远不会退出。 很显然,有什么不对的地方堆,但目前最好的解决办法似乎是明确地关闭连接的Django退出之前。

所以:有一个关机前信号或挂钩,Django提供了吗?

BTW:万一我的连接代码,你有兴趣。

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正确的方法是什么?)

Answer 1:

虽然这不会解决您的问题,窍门是在2012年7月推出了这一承诺pymongo: https://github.com/mongodb/mongo-python-driver/commit/1fe6029c5d78eed64fcb2a6d368d9cdf8756d2f4#commitcomment-1820334 。

具体来说,它不仅影响ReplicaSetConnections。 他们给出的答案是调用connection.close()时,但是当你在正确的提问时指出,没有好的钩关闭连接。

我相信,你可以放心地收于每一个请求端的连接。 Django中已经这样做了它的ORM连接到数据库。 这就是为什么他们推荐使用连接池像pgbouncer,所以重新连接到Postgres的是即时的。 Pymongo内置了一个连接池,所以在将重新连接。



文章来源: Django pre-shutdown hook to close hanging pymongo connection