2012-11-22 5 views
2

웹 응용 프로그램이 있으며 매분마다 수천 개의 요청이 있습니다.Python과 mongoDB 연결 풀 (pymongo)

Tool.py : 다음은 MongoDB의 연결을위한 내 파이썬 코드

@app.route("/test") 
def test(): 
    request_collection = getCollection("user") 
    results = request_collection.find() 
    for result in results: 
     #do something... 
     request_collection.save(result) 
    request_collection.end_request() 

하나 개의 HTTP 요청이 기능을 통해 연결을 얻을 수

globalconnection = None 

def getCollection(name,safe=False,readpref=ReadPreference.PRIMARY): 

    global globalconnection 
    while globalconnection is None: 
      try: 
        if not globalconnection is None: 
          globalconnection.close() 
        globalconnection = Connection('mongodb://host:port',replicaSet='mysetname',safe=False,read_preference=ReadPreference.PRIMARY,network_timeout=30,max_pool_size=1024) 
      except Exception as e: 
        globalconnection = None 

    request_context.connection = globalconnection 

    return request_context.connection["mydb"]["mycoll"] 

web.py는

http 요청은 요청이 끝나기 전에 end_request를 호출합니다.

그러나 요청이 증가하는 동안 mongoDB에는 많은 AutoReconnect 오류와 20000 개 이상의 연결이있는 것으로 나타났습니다.

의견이 있으십니까? http://api.mongodb.org/python/current/api/pymongo/errors.html

  • 30 초 타임 아웃 대신 짧은 시간 제한을하려고 너무 긴 소리 : 자동 재 연결 당신은 단순히 예외를 catch하고 다시 연결을 얻으려고 들어

  • +3

    이 관련이 있지만, x는 아무도하지 않는 경우 '라고하는 것이 더 일반적이다 :'. –

    +0

    globalconnection은 None이 될 수 없습니다. "globalconnection은 None입니다."라는 메시지가 나오기 때문에 그 라인에는 아무 것도 없습니다. " –

    +0

    "동시에 "여러 개의 요청이있을 수 있으므로"if "를 줄이면됩니다. 연결 개체의 수 –

    답변

    2
    1. ? MongoDB에의 연결의

    2. 증가의 최대 번호 (기본값 : 20000) http://www.mongodb.org/display/DOCS/Connections

    +0

    1. 제안 해 주셔서 감사 드리며이를 구현했습니다. 2. 어떤 제안이 있습니까? 3. mongoDB에서이 [웹 사이트] (http://www.mongodb.org/display/DOCS/Too+Many+Open+Files)에 대한 연결 수가 20,000 개로 제한되어 있기 때문에 이것에 대해 잘 모릅니다. –