2012-04-17 4 views
0

mongodb 클러스터에 연결하는 데 새 ReplicaSetConnection 메서드를 사용하고 있습니다. 변경 사항은 실제로 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()를 호출 할 필요가 없습니다. 연결을 끊으면 모든 소켓이 닫힙니다.

관련 문제