龙卷风在处理处理程序时如何处理远程关闭连接?

How tornado process remote close connection while it is processing handler?

我已经阅读了 tornado ioloop 和相关模块,以了解当接受套接字并解析和处理请求时 tornado 会做什么。

想知道tornado是否可以在请求连接关闭后停止请求处理?


我构建了一个测试处理程序,get 方法花费 5 秒休眠 (time.sleeo(5))。

然后我向tornado发送了一些请求,所有请求都设置了读取超时3秒,我在tornado上发现了一些close_wait连接,几分钟后,这些连接正常关闭。

我猜 5 秒处理程序减慢了 tornado 的事件循环,当 tornado 处理第二个处理程序时,它的连接已经关闭,如果 tornado 知道,它不需要做下一步。

  1. 不要在 Tornado 应用程序中使用 time.sleep();参见 了解原因。

  2. 当处理程序的耗时部分是非阻塞时,您可以定义一个方法on_connection_close(),该方法将在连接关闭时调用。通过这种方法,您可以取消正在进行的工作。您必须自己实施取消,例如通过在 on_connection_close 中设置 self.cancelled = True,然后在正在进行的异步工作期间定期检查此属性。