0

mongodb クラスターに接続するために、新しい ReplicaSetConnection メソッドを使用しています。この変更は、pymongo.Connection を pymongo.ReplicaSetConnection に置き換えることに帰着します。目的のために接続を使用し、接続で end_request を呼び出して、接続で disconnect() を呼び出す前に接続を確実にフラッシュします。これにより、長期的に実行した後、半分接続されたソケットの大きなコレクションがなくなることが保証されます。これは、Connection を使用するとうまく機能しますが、ReplicaSetConnection を使用すると、ReplicaSetConnection オブジェクトに対してこれを最も確実に呼び出しているという事実にもかかわらず、pymongo はデータベース オブジェクトで end_request() を実行しようとしていると不平を言います。これはpymongoの新しいものですか、それともドライバーのエラーですか? 以下は、私が経験している問題を手動で実行したものです。

>>> 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'])
4

1 に答える 1

0

PyMongo 2.1 の ReplicaSetConnection は end_request() をサポートしていません。バージョン 2.2 で、今後 2 週間以内にリリースされます。一方、切断する前に end_request() を呼び出す必要はありません。切断すると、すべてのソケットが閉じます。

于 2012-04-17T15:04:02.940 に答える