因此,我正在開發一個包含大量模塊的相當大的python項目。 「主」(runnable)模塊是一個守護進程(實際上是一個Thrift守護進程),它調用其他模塊的實際功能。啓動守護進程需要很長時間,因爲某些模塊有相當長的時間並涉及初始化過程。檢測python模塊是否更改,然後重新加載
因此,當我啓動守護進程時,我等等......讓我們說... 2分鐘內加載所有內容,這在事情的宏偉計劃中並不算太壞。然而,對於開發來說,它會變成一個主要的痛苦,因爲我需要重新啓動守護進程,每次都會浪費我很多時間。
大多數模塊只需要幾秒鐘即可加載。理想情況下,我想要做的是檢測特定模塊中的任何文件何時發生更改,然後重新加載該特定模塊。我已經知道了how to reload a module,但在這一點上,我無法弄清楚如何觀察特定模塊的變化。請記住,在這種情況下,一個模塊不是一個單一的.py
文件,而是一個包含__init__.py
和5-10 .py
文件的目錄,所以我需要檢測它們的任何之間何時發生了更改。
這裏是項目佈局(如果它使在所有的任何區別)
project
| -- daemonize.py
| -- main.py
| -- moduleA
| | -- __init__.py
| | -- happy_panda.py
| ` -- sad_panda.py
| -- moduleB
| | -- __init__.py
| | -- takes_forever_to_load.py
| ` -- seriously_get_some_coffee.py
| -- moduleC
| | -- __init__.py
| | -- frequently_changes.py
| | -- reasons_i_hate_my_job.txt
| ` -- home_address_of_moduleB_developer.txt
` -- service.py <-- uses modules A, B, and C
任何意見或建議表示讚賞。
編輯
感謝偉大的反饋。以下是我根據建議創建的代碼。 pyinotify似乎獲得了多個通知,但這對我來說是一個非常小的問題,所以我不打算修復它。
https://gist.github.com/1013122
不重新加載之前已經檢查過文件在做任何事之前已經改變了嗎? – 2011-06-07 19:19:49
@Bastien:看完文檔後重新加載,不,我不相信這是重新加載的行爲。如我錯了請糾正我。 – 2011-06-07 19:23:03