Python實踐:模組自動過載

發表於2015-12-27

一、概述

開發Web程式時,通常會採用本地伺服器進行除錯,但如果程式碼有變動,就需要重啟伺服器。開發過程中修改程式碼是經常的事,不斷地重啟伺服器既麻煩又耗時。因此為了避免這種笨拙的行為,在流行的Web框架中,都提供了 模組自動過載 的功能:不用重啟伺服器,自動重新載入有變動的模組。

自動 的方式有很多,具體跟Web框架的實現強相關。像web.py中就是通過每次處理請求時都嘗試過載來模擬自動,而flask中則是使用獨立執行緒來完成的。簡單起見,本文的測試程式碼中採用while迴圈(獨立程式)來實現自動。

二、思路

遍歷已經載入的所有模組,檢視每個模組的對應檔案的最近修改時間,如果時間有變化,則重新載入該模組。

三、實現

四、測試

1、開啟自動過載(終端1)

2、修改模組(終端2)

3、檢視實時輸出(終端1)

一旦對testmod.py有修改儲存,終端1中會立即列印出模組testmod的當前所有屬性。當然,也可以修改handler來實現其他的處理方式。

五、參考原始碼

(1)web.py的Reloader

(2)werkzeug的_reloader_stat_loop

相關文章