2011-03-11 124 views
1

我正在使用Sander's recipy在Python中守護進程。直到現在運行良好,但我不得不介紹一些正在鑽探我的大腦的變化。 事實是:Python線程和守護進程

桑德爾的守護進程生活方式創建一個新的對象的實例,每次你問它。例如:

[prompt]> python my_daemon.py start 
[prompt]> python my_daemon.py check_whatever (new instance of my_daemon.py is created, but it looks for pid and finally gets the first one.) 

然後,查找用於創建舊實例的pid,您可以訪問它並使用它進行管理。

的情況是:這個守護產卵的守護程序執行的啓動命令,並準備承認另一個(記住,創建一個新的實例)之後繼續工作兩個線程。我想在另一個命令中訪問這個線程,但是,我還沒有找到方法(如果有的話)。
據我研究,使用pid只能殺死或檢查守護進程,但不知道是否可以獲取由該實例創建的對象(ergo,線程)。

開放式問題

- 如果我可以恢復其PID的過程中,可我還訪問了對象?

-Do我要考慮轉換這個線程子過程,以留住他們,其主線程完成(或仍在等待)後還活着嗎?

回答

0

我不確定是否需要一個新的進程,但實現起來可能要比仔細管理GIL的方式要乾淨得多,具體取決於守護進程的任務大小線程執行,以及它們是純python還是可以通過調用外部庫來釋放GIL。

至於通過PID訪問,我不知道這是否是可能的,這絕不是在Windows下的線程,因爲他們沒有自己的pid;對我來說,讓管道保持開放給你的新線程似乎更加簡單。

實際上有太多的架構決定乾淨利落地回答這個問題,但如果你已經做出決定,隨意更多信息添加到您的問題,我會盡力給出一個更明智的答案。

+0

我還沒有選擇任何決定。我只是簡單地發現,使用啓動命令中產生線程的進程,我無法在其餘命令中訪問它們。 – Francisco 2011-03-11 17:16:40

0

代碼的內容做一個「清除」,降低了主動線到最小之後,我意識到,線程停滯不前(好戰士)。當我處理那些我認爲可以在守護進程本身的行爲中建立的文件(因爲它將文件描述符設置爲空)時會出現一些問題。

就目前而言,我認爲自己是幸福的,因爲我可以用一些虛擬協議來改變這些線程的運行行爲(例如虛擬配置文件)。

+0

多麼好奇,無法處理守護進程的運行方法內的文件(在我自己的類中被重寫的文件)。 – Francisco 2011-03-11 20:48:40

+0

[諷刺]句子os.chdir(「/」)對你說了什麼?[/諷刺]我錯過了這個改變。所有文件都被放在int「/」中。 – Francisco 2011-03-11 21:18:14