2014-02-13 12 views
0

是否可以在單獨的cherrypy web應用程序的單個模塊上使用python reload命令(或類似命令)?我有一個基於CherryPy的Web應用程序,經常處於持續使用狀態。我會不時做出一個隻影響一個模塊的「重要」變化。我希望能夠立即重新加載該模塊,而不會影響其他Web應用程序。毫無疑問,完全重啓是很快的,但仍然有幾秒鐘的停機時間,如果可能,我寧願避免。在cherrypy中重新加載單個模塊?

+0

http://stackoverflow.com/questions/6270395/detect-if-a-python-module-changes-and-then-reload –

+0

@OmidRaha關閉,但沒有雪茄。這個問題與cherrypy無關。我知道如何重新加載一個模塊(請參閱我對python reload命令的參考),我正在尋找的是一種讓CherryPy(而不是我的代碼)重新加載我的模塊之一的方法。除非它像在我的代碼中調用重裝一樣簡單? – ibrewster

回答

4

重新加載模塊非常非常難以理智地完成。它會導致代碼中的陳舊對象具有無法查詢狀態和微妙的錯誤的可能性。這不是你想要做的事情。

真正的Web應用程序傾向於做的事情是讓服務器在其應用程序前保持活動狀態,例如使用mod_proxy的Apache來充當反向代理。你開始你的新應用服務器,改變你的反向代理的路由,然後殺掉舊的應用服務器。

沒有停機。沒有瘋狂的,不可撼動的代碼。

+2

+1。我曾經走過這條路。 *保存完好無損。 – Carpetsmoker

+0

http://tools.cherrypy.org/wiki/ModProxy是關於使用CherryPy和mod_proxy的一些信息。 (隨意使用nginx或其他任何東西,而不是你喜歡的。) –

+0

我明白了。因此,我的應用程序服務器有兩個實例正在運行(至少在修改內容時)。我已經在mod_proxy中使用了apache,所以這完全可以通過爲應用服務器使用兩個不同的端口並在兩者之間切換來完成。不過,我想我會遇到同樣的問題,重啓apache來更改代理路由 - 當apache重新啓動以使用其他服務器/端口時,用戶沒有得到響應的危險。除非我可以進行代理路徑/路由的實時更新?嗯... – ibrewster