2012-10-23 52 views
1

我不想在調試模式下運行龍捲風或使用autoreload,我仍然希望能夠通過觸發器來重新加載服務器,例如請求特定的URL或計時器或其他東西,手動重新加載龍捲風

有沒有辦法手動重新加載龍捲風httpserver而不殺死進程並重新啓動它?

+0

如何將這項工作?自動重新加載只會殺死進程並啓動一個新進程。我無法打電話到tornado.autoreload._reload()玩好,但即使你這樣做,它會放棄所有打開的連接... –

+0

所以基本上這是一個限制不是特定於龍捲風,你不能用任何正在運行的python代碼來做到這一點,對吧? – Ali

+1

其實,我錯了,這*應*可能與重裝:http://docs.python.org/library/functions.html?highlight=reload#reload –

回答

1

我這樣做的唯一方法是在Nginx代理後面運行它,然後通過supervisord重新啓動每個正在運行的進程。它有點笨重,但是一旦你將它編出來,實際上並不是那麼糟糕,並且對用戶應該是透明的。

只是做了搜索,發現了一個非常相似,但更好的措辭回答: Is there a way to deploy new code with Tornado/Python without restarting the server?

+0

所以基本上答案不,我應該有一種方法來加載autoreload模塊,但調用_reload或_restart或手動調用。 – Ali

+1

有一個補丁使用'os.stat'來查看模板時間戳,而後者只能用於模板。除了通過調試之外,我不確定任何允許熱重載代碼的補丁。可能有一種方法可以讓'autoreload'在某種事件中做一些事情,但我已經通過Nginx完成了它,並重新啓動了進程,以便在實時更新其代碼庫。 – sean