2012-04-17 12 views
0

新しいReplicaSetConnectionメソッドを使用してmongodbクラスタに接続しています。変更は本当にpymongo.Connectionをpymongo.ReplicaSetConnectionに置き換えることになります。私は自分の目的のために接続を使用し、接続のend_requestを呼び出して、接続のdisconnect()を呼び出す前に接続をフラッシュするようにします。これは、長い実行後に半分に接続されたソケットの大きなコレクションを持っていないことを保証します。これは、私がConnectionを使用するときにうまくいきますが、ReplicaSetConnectionを使用すると、pymongoはReplicaSetConnectionオブジェクトに対してこれを最も確実に呼び出すにもかかわらず、データベースオブジェクトに対してend_request()を実行しようとしていると文句を言います。これは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()を呼び出す必要はありません。切断すると、すべてのソケットが閉じます。

関連する問題