从同步更改为异步处理程序时没有任何改进

时间:2015-08-17 03:31:46

标签: python tornado

我只是比较了同步和异步版本处理程序,并且“响应时间”没有任何改进。等度量标准,那么如何在这种情况下进行调试?

处理程序

@gen.coroutine
def get(self):
    calendar = Calendar()
    response = yield (calendar.events())
    self.write(response)
    self.finish()

模型

class Calendar(object):
    @return_future
    def events(self, callback=None):
        result = # MySQLDB operation
        callback(result)

基本信息:

CPU: 1 core
Dababase: MySQLDB

1 个答案:

答案 0 :(得分:0)

@return_future在这里没有任何意义。它用于将已经异步(并使用回调)的函数调整为可以从协程生成的函数。在现代的Tornado应用程序中使用它几乎没有理由;只需在任何地方使用@gen.coroutine

要在不阻止IOLoop的情况下运行MySQLdb操作,必须在单独的线程上运行它。安装futures包并创建一个ThreadPoolExecutor:

executor = ThreadPoolExecutor(4)

class Calendar:
    @gen.coroutine
    def events(self):
        result = yield executor.submit(mysqldb_operation)
        raise gen.Return(result)