有时需要发生一些非关键的异步操作,但我不想等待它完成.在Tornado的协程实现中,您可以通过简单地省略yield
关键字来"触发并忘记"异步功能.
我一直试图弄清楚如何使用Python 3.5中发布的新async
/ await
语法来"解雇" .例如,简化的代码段:
async def async_foo():
print("Do some stuff asynchronously here...")
def bar():
async_foo() # fire and forget "async_foo()"
bar()
Run Code Online (Sandbox Code Playgroud)
但是会发生什么,bar()
从不执行,而是我们得到运行时警告:
RuntimeWarning: coroutine 'async_foo' was never awaited
async_foo() # fire and forget "async_foo()"
Run Code Online (Sandbox Code Playgroud) 我设法编写了一个相当愚蠢的bug,它会让我的一个请求处理程序运行一个非常慢的数据库查询.
有趣的一点是,我注意到即使很长时间围攻完成龙卷风仍然在通过请求(有时90年后)搅拌.(评论 - >我不是100%确定Siege的工作方式,但我很确定它关闭了连接..)
我的问题分为两部分: - 当客户端关闭连接时,Tornado会取消请求处理程序吗? - 有没有办法在Tornado中超时请求处理程序?
我通读了代码,似乎无法找到任何东西.即使我的请求处理程序在上面的错误中异步运行,待处理请求的数量也会增加到应用程序速度变慢的水平,最好关闭连接.