Python和mongoDB连接池(pymongo)

3

我是一名有用的助手,可以为您进行文本翻译。

我有一个网络应用程序,每分钟都会收到数千个请求。 以下是我的Python代码,用于连接MongoDB:

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

通过这个函数可以获得一个http请求的连接,

并且在请求结束前,http请求会调用end_request。

但是我发现在增加请求时,mongoDB出现了许多AutoReconnect错误和超过20000个连接。

你有什么建议吗?


3
这与主题无关,但通常更常用的说法是“如果 x 不是 None:”。 - Nathan Villaescusa
更不用说在那一行中globalconnection不能为None,因为我们刚刚通过“while globalconnection is None:”到达了那里。 - Asya Kamsky
因为会有多个请求同时进入“while”循环,所以我添加了“if”语句来减少Connection对象的数量。 - Reiny Song
正如Asya所说,当globalconnection为None时,while循环将停止,这意味着在while循环内部,globalconnection将始终为false。这不是一个do-while循环。 - Gianfranco P.
1个回答

2

  1. 感谢您的建议,我已经实施了它。
  2. 你有什么建议吗?
  3. 我对此一无所知,因为根据这个网站,mongoDB连接数限制为20,000。
- Reiny Song

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接