2011-06-07 81 views
22

因此,我正在開發一個包含大量模塊的相當大的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

+0

不重新加載之前已經檢查過文件在做任何事之前已經改變了嗎? – 2011-06-07 19:19:49

+0

@Bastien:看完文檔後重新加載,不,我不相信這是重新加載的行爲。如我錯了請糾正我。 – 2011-06-07 19:23:03

回答

8

Detect File Change Without Polling

。當文件被修改時,它使用Inotify「通知」(看他們在那裏做了什麼)程序。

+0

非常好!我正在考慮在我調用之前弄清楚模塊是否發生了變化,但是通過這種方式,我可以重新加載文件更改的時刻。不會想到這一點。 – 2011-06-07 19:27:26

+0

很高興提供幫助,很高興我實際上找到了你的問題,這會派上用場,因爲我正在努力工作,並且我沒有考慮過這種技術作爲節省時間的方法。 – Paystey 2011-06-07 21:26:42

1

我想看看所有的文件,並detect if a file was modified。如果是的話,我會reload吧。再加上你已經知道如何重新加載你的模塊這個答案几乎填滿它

+0

你將如何處理確定哪些文件屬於一個模塊?從頂層我所擁有的就是模塊名稱。 – 2011-06-07 19:20:08

+0

我會看遞歸的文件夾。是否有經常更改的文件不是代碼或配置文件? – 2011-06-07 19:22:05

+0

另外,你在啓動時需要2分鐘做些什麼? – 2011-06-07 19:23:03

相關問題