我在Django项目中使用pymongo,最近我开始遇到一个问题,在退出主Django进程(即使通过管理命令)时, pymongo连接将挂起,并且该进程将永远不会退出。很明显,堆栈中某处出了问题,但现在最好的解决方案似乎是在Django退出之前明确关闭连接。Django预关机挂钩关闭挂pymongo连接
所以:Django为此提供了预关闭信号还是挂钩?
顺便说一句:我的连接代码,如果你有兴趣。
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?正确的方式)
在每次请求结束时关闭连接会带来非常显着的性能损失。在下一个请求中,ReplicaSetConnection必须重新发现整个副本集并连接到每个成员。我很抱歉你遇到了这个问题,我们打算尽快解决它。但更好的解决方案是在Django中找到一些关闭钩子并修复关闭顺序,而不是惩罚每一个请求。 – 2012-09-08 00:19:55
由于这是Django,我在处理'manage.py'中的命令后添加了一些清理代码。然而,这是发生了什么。没有关机挂钩,AFAIK。 – 2012-09-10 03:05:32