我在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