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