Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tornado:如何为多个请求共享pymongo连接?_Python_Mongodb_Tornado_Pymongo - Fatal编程技术网

Python Tornado:如何为多个请求共享pymongo连接?

Python Tornado:如何为多个请求共享pymongo连接?,python,mongodb,tornado,pymongo,Python,Mongodb,Tornado,Pymongo,我想为多个请求共享MongoDB连接。这就是我现在拥有的,但看起来它正在为每个请求创建一个新的连接 dbasync = asyncmongo.Client(pool_id='mydb', host='127.0.0.1', port=27017, maxcached=10, maxconnections=50, dbname='bench') @route('/readAsync') class ReadAllAsynchHandler(tornado.web.RequestHandler):

我想为多个请求共享MongoDB连接。这就是我现在拥有的,但看起来它正在为每个请求创建一个新的连接

dbasync = asyncmongo.Client(pool_id='mydb', host='127.0.0.1', port=27017, maxcached=10, maxconnections=50, dbname='bench')

@route('/readAsync')
class ReadAllAsynchHandler(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    def get(self):        
        print("getting sessions")
        dbasync["ss"].find({}, callback=self._on_response)

    def _on_response(self, response, error):
        print("on response: %s" % response)
        if error:
            raise tornado.web.HTTPError(500)
        self.finish(SS_TEMPLATE.generate(sessions=response))
在对1000个并发客户端进行基准测试时,我会遇到以下错误:

Traceback (most recent call last):
  File "/home/ubuntu/envs/myproj/local/lib/python2.7/site-packages/tornado/web.py", line 1115, in _stack_context_handle_exception
    raise_exc_info((type, value, traceback))
  File "/home/ubuntu/envs/myproj/local/lib/python2.7/site-packages/tornado/web.py", line 1298, in wrapper
    result = method(self, *args, **kwargs)
  File "bench.py", line 29, in get
    dbasync["ss"].find({}, callback=self._on_response)
  File "/home/ubuntu/envs/myproj/local/lib/python2.7/site-packages/asyncmongo/cursor.py", line 380, in find
    connection = self.__pool.connection()
  File "/home/ubuntu/envs/myproj/local/lib/python2.7/site-packages/asyncmongo/pool.py", line 116, in connection
    raise TooManyConnections("%d connections are already equal to the max: %d" % (self._connections, self._maxconnections))
TooManyConnections: 50 connections are already equal to the max: 50

DEBUG:root:dropping connection. connection pool (10) is full. maxcached 10

maxconnections
参数不用于缓冲现有连接池重用的请求。相反,它的存在只是为了确保,如果需要的话,您的应用程序不会消耗无限量的资源。有关此行为的更多讨论,请参阅。这个拉请求似乎提供了您想要的行为。您可以使用以下内容安装asyncmongo及其修订版:

pip install git+git://github.com/ceymard/asyncmongo.git@7a8e6f6f446d71f8fd4f17de48994c0b6bee72ee
或者,您可以在Tornado设置中的某个位置或通过nginx(例如,请参阅HttpLimitConnModule)限制应用程序的并发连接数