4

以下代码根据参数的值从请求中获取参数并从 couchbase db 响应。

couchbase = Couchbase("ubuntumartini03:8091", "thebucket", "")
bucket = couchbase["thebucket"]

class MH(tornado.web.RequestHandler):
        def get(self):
                key = self.get_argument("pub_id", strip=True)
                result = json.loads(bucket.get(key)[2])
                self.write(result['metaTag'])


if __name__=="__main__":
        app = tornado.web.Application(handlers=[(r"/", MH)])
        app.listen(8888,"")
        tornado.ioloop.IOLoop.instance().start()

问题:对于给定的硬件,我们可以从 Tornado 机器以 10k/秒的速度调用 Couchbase。但是当我们从客户端打电话到 Tornado 机器时,我们只能拨打 350 个电话/秒。

当然,这里的瓶颈是龙卷风。如何对其进行优化以使其能够进行至少 7k 次呼叫/秒?

4

2 回答 2

1

像这样编辑您的代码:

from tornado.ioloop import IOLoop


couchbase = Couchbase("ubuntumartini03:8091", "thebucket", "")
bucket = couchbase["thebucket"]

class MH(tornado.web.RequestHandler):
    async def get(self):
        key = self.get_argument("pub_id", strip=True)
        result = await IOLoop.current().run_in_executor(None,bucket.get,*(key))
        self.write(result[2]['metaTag'])


if __name__=="__main__":
    app = tornado.web.Application(handlers=[(r"/", MH)])
    app.listen(8888,"")
    tornado.ioloop.IOLoop.instance().start()
于 2020-01-16T06:53:37.660 回答
0

您使用什么客户端,是同步客户端还是异步客户端?如果这是一个同步客户端,就不能不充分利用tornado ioloop reactor。

于 2013-03-20T16:49:50.747 回答