【问题标题】:Manually reload tornado手动重新加载龙卷风
【发布时间】:2012-10-23 19:08:35
【问题描述】:

我不想在调试模式下运行 tornado 或使用 autoreload ,但我仍然希望能够通过触发器重新加载服务器,例如请求特定的 url,或者使用计时器或其他东西,

有没有办法手动重新加载 tornado httpserver 而不会终止进程并重新启动它?

【问题讨论】:

  • 这将如何工作? Autoreload 只是终止进程并启动一个新进程。我无法调用 tornado.autoreload._reload() 来玩得很好,但即使你这样做了,它也会断开所有打开的连接...
  • 所以基本上这不是特定于龙卷风的限制,你不能用任何正在运行的python代码来做到这一点,对吧?
  • 其实我错了,这个应该可以通过reload来实现:docs.python.org/library/functions.html?highlight=reload#reload
  • 然而,实现(重新加载)是...复杂的。像重新加载顺序这样的事情很重要。这就是为什么 Tornado 只是重新启动该过程。例如,对于 sys.modules.values() 中的 mod:reload(mod) 中断。

标签: python reload tornado


【解决方案1】:

我这样做的唯一方法是在 Nginx 代理后面运行它,然后通过 supervisord 重新启动每个正在运行的进程。这有点笨拙,但一旦你编写了脚本,它实际上并没有那么糟糕,应该对用户透明。

刚刚进行了搜索,发现了一个非常相似但措辞更好的答案: Is there a way to deploy new code with Tornado/Python without restarting the server?

【讨论】:

  • 所以基本上答案是否定的,我虽然应该有一种方法来加载自动重载模块,但调用 _reload 或 _restart 或任何手动调用的方法。
  • 有一个补丁使用os.stat 来查看模板时间戳,这很有效,但同样只适用于模板。除了通过调试之外,我不确定是否有任何允许热重新加载代码的补丁。可能有一种方法可以公开autoreload 以在某种事件中执行某些操作,但我已经通过 Nginx 完成了它并依次重新启动进程以实时更新其代码库。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多