我已經編寫了一個專門的JSON-RPC服務器,並開始按照我的方式進入應用程序邏輯,發現它經常不得不停止/重新啓動服務器以進行某些更改是一件煩人的事。對Twisted應用程序的某些部分進行重新加載的策略或支持?
以前我有一個處理程序在間隔中運行,將模塊修改的時間戳與過去的檢查進行比較,然後根據需要重新加載模塊。不幸的是,我不相信它現在能夠正常工作。
有沒有一種方式讓反應器以類似於Paster的Reloadable HTTPServer的方式停止和重新啓動?
我已經編寫了一個專門的JSON-RPC服務器,並開始按照我的方式進入應用程序邏輯,發現它經常不得不停止/重新啓動服務器以進行某些更改是一件煩人的事。對Twisted應用程序的某些部分進行重新加載的策略或支持?
以前我有一個處理程序在間隔中運行,將模塊修改的時間戳與過去的檢查進行比較,然後根據需要重新加載模塊。不幸的是,我不相信它現在能夠正常工作。
有沒有一種方式讓反應器以類似於Paster的Reloadable HTTPServer的方式停止和重新啓動?
隨扭曲是twisted.python.rebuild模塊,這樣可能是一個良好的開端。
也看到這個問題的SO:Checking for code changes in all imported python modules
這並不完美,但twisted.python.rebuild似乎適合我的情況。 – David 2010-01-10 02:26:25
你可以寫類似貼紙的reloader的東西,將工作是這樣的:
然而,這裏的問題是,與開發Web服務器,最扭曲的應用程序有更多的國家和只是平了殺/重新啓動的過程是一個壞主意,你可能會失去一些狀態。
有一種方法可以做到這一點乾淨:
當產卵扭曲的應用程序,使用subprocess.Popen()
或類似,以獲得標準輸入/輸出管道。現在在你的子進程中,使用扭曲的反應堆來監聽stdin(這是扭曲的代碼,參見twisted.internet.stdio
,它允許你使用通常的非阻塞方式和一個stdio傳輸協議)。
最後,當你決定重新加載的時候,寫一些東西到子進程的stdin,告訴它關閉。現在你的代碼可以正常響應和關閉。一旦它乾淨地退出,你的主進程就可以重新產生它。
(或者您可以使用信號來實現這一點,但是這可能不是OS移植)
我在想你的計劃可能是我可以採取的最簡單的方法。 – David 2010-01-08 09:07:49
目前我正在試圖既Crast的和clemesha的答案......將更新我的問題,並挑選我的情況贏家soonish。 – David 2010-01-09 05:55:34
你知道你在遇到問題時遇到麻煩,並回到3年前問你的問題。 – David 2013-11-29 23:02:51