与协同程序的龙卷风性能问题

时间:2016-11-21 07:34:41

标签: python tornado

使用协程后我遇到了性能问题,代码很简单,如官方文档:

class MainHandler(tornado.web.RequestHandler):
    @tornado.gen.coroutine
    def get(self):
        httpClient = tornado.httpclient.AsyncHTTPClient()
        yield httpClient.fetch('http://google.com/', method = 'GET')

测试命令是:

wrk -t12 -c400 -d30s http://10.0.0.10:2002/

我每秒只能获得66个请求,如果我删除httpClient.fetch(),我每秒可以获得1659个请求。 Tornado在E5-2666 v3 @ 2.90GHz上运行单个进程,此进程的CPU使用率均为100%。

我正在使用Tornado v4.4.1,python 2.7。

1 个答案:

答案 0 :(得分:4)

默认情况下,AsyncHTTPClient不会等待超过10个并发请求。因此,如果每次获取在开始和结束之间花费大约150ms,那么这将限制您每秒约66次提取。由于每个MainHandler.get等待AsyncHTTPClient.fetch,这意味着get也会出现瓶颈。

在程序的最开始,像这样提升最大客户端:

tornado.httpclient.AsyncHTTPClient.configure(None, max_clients=1000)

在所有导入之后以及创建任何AsyncHTTPClients之前执行此操作。