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

时间:2017-09-14 13:29:45

标签: tornado

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

我想知道龙卷风是否有可能在请求连接关闭后停止请求处理?

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

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

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

1 个答案:

答案 0 :(得分:0)

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

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