问题几乎说明了一切。如果我在使用Supervisor的服务器上运行Tornado,当我部署代码并需要重新启动Tornado服务器时,活动请求会发生什么?他们在请求中被丢弃了吗?他们被允许完成吗?
答案 0 :(得分:2)
Supervisord向龙卷风过程发送HUP或TERM等信号,最重要的一点是龙卷风如何处理它。
不幸的是,龙卷风在获得HUP,TERM,INT等信号时会退出。
Tornado有一个名为autoreload的子模块,它使应用程序可以检测代码文件的更改并重新加载应用程序,但它只适用于一个进程的调试模式,而不适用于WSGI应用程序。这是开发工具。
但是,我们可以通过手动在run tornado.autoreload._reload函数中定义一个函数,并将其注册为HUP信号。 tornado.autoreload.add_reload_hook可以在重新加载时调用添加函数。
因为龙卷风不能在fork模式下很好地管理进程,所以建议为不同的端口运行许多独立的进程。在这种模式下,_reload将像set debug flag一样工作。
毕竟,测试并对其进行基准测试,以确保它在您的应用程序中运行良好。