【发布时间】:2018-12-24 19:27:21
【问题描述】:
覆盖方法 on_finish()。
用.gen.coroutine 装饰这个方法,使其异步,它工作。
@gen.coroutine
def on_finish(self):
print("==========on_finish==============")
但使用async def 使其异步,它失败了。
async def on_finish(self):
print("==========on_finish==============")
# RuntimeWarning: coroutine 'BaseHandler.on_finish' was never awaited
self.on_finish()
为什么我不能使用async def 使其异步?
【问题讨论】:
-
我想是因为tornado runs on_finish() synchronously。您的第一个示例没有工作,它只是没有引发任何错误,因为它在语法上是正确的并且默默地失败了。我在
add_callback()电话中看到了可能的解决方法。 -
是的,Fian 是对的。 Tornado 不支持将
on_finish设为异步函数。但是你想做什么?为什么要让它异步? -
我使用 TorMySQL 异步连接 mysql。在 prepare() 函数中,我得到一个 db.conn(),我想在 on_finish() 函数中自动关闭连接。函数 db.conn.close() 必须是异步的
-
@Lvxiuquan 就像上面Fian已经指出的那样,您可以使用
add_callback()方法安排关闭连接。 Tornado 将异步运行它。如果你愿意,我可以发布示例代码。 -
@xyres 不要打扰。我明白了,谢谢。
标签: asynchronous tornado coroutine