2012-04-17 35 views
0

我正在使用新的ReplicaSetConnection方法建立到我的mongodb集羣的連接。這個改變實際上歸結於用pymongo.ReplicaSetConnection替換pymongo.Connection。我將連接用於我的目的,然後在連接上調用end_request以確保在連接上調用disconnect()之前刷新連接。這可以確保在長時間運行後,我沒有大量半連接的套接字。這在我使用Connection時效果很好,但是當我使用ReplicaSetConnection時,pymongo抱怨說我試圖在數據庫對象上運行end_request(),儘管事實上我絕對是在調用ReplicaSetConnection對象。這是pymongo中的新東西嗎?或者這是驅動程序中的錯誤?以下是我遇到的問題的手動運行。mongodb:在ReplicaSetConnection上調用end_request會引發數據庫錯誤

>>> import pymongo 
>>> s = pymongo.ReplicaSetConnection("192.168.1.1:27017, 192.168.1.2:27017", replicaSet='rep1', safe=True) 
>>> s 
ReplicaSetConnection([u'192.168.1.1:27017', u'192.168.1.2:27017']) 
>>> s.read_preference = pymongo.ReadPreference.SECONDARY 
>>> s 
ReplicaSetConnection([u'192.168.1.1:27017', u'192.168.1.2:27017']) 
>>> type(s) 
<class 'pymongo.replica_set_connection.ReplicaSetConnection'> 
>>> d = s['test'] 
>>> s.end_request() 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "build/bdist.linux-x86_64/egg/pymongo/database.py", line 696, in __call__ 
TypeError: 'Database' object is not callable. If you meant to call the 'end_request' method on a 'Connection' object it is failing because no such method exists. 
>>> s.disconnect() 
>>> s 
ReplicaSetConnection([u'192.168.1.1:27017', u'192.168.1.2:27017']) 

回答

0

PyMongo 2.1中的ReplicaSetConnection不支持end_request();它將在2.2版中在未來幾周內發佈。同時,在斷開之前不需要調用end_request()。斷開將關閉所有插座。