3

私はWebアプリケーションを持っており、毎分何千ものリクエストがあります。以下は、mongoDB接続用のPythonコードです。

Tool.py:

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

@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()

1つのhttpリクエストは、この関数を介して接続を取得します。

httpリクエストは、リクエストが終了する前にend_requestを呼び出します。

しかし、リクエストを増やしている間、mongoDBには多くのAutoReconnectエラーと20000を超える接続があることがわかりました。

何か提案はありますか?

4

1 に答える 1

2
  1. 自動再接続の場合は、例外をキャッチして、接続を再試行します:http: //api.mongodb.org/python/current/api/pymongo/errors.html

  2. 30秒のタイムアウトは長すぎるように聞こえますが、代わりに短いタイムアウトを試してください。

  3. mongodbからの接続の最大数を増やします(デフォルト:20000) http://www.mongodb.org/display/DOCS/Connections

于 2012-11-25T08:45:41.837 に答える