2010-05-10 88 views
1

我試圖找到一個很好的,簡單的方法來從父 進程發信號子進程 (通過SocketServer與ForkingMixIn創建)。如何「發信號」感興趣的子進程(沒有信號)?

雖然可以使用Unix的信號,我想避開他們,因爲只有 孩子誰是興趣應接收信號,這將是 矯枉過正而複雜,要求某種登記 機制來識別父進程誰有興趣。

(請不要建議線程,這個特定的程序將無法正常工作 與線程,因此必須使用叉子。)

回答

3

既然你是在unix系統上,信號量應該是簡單的答案。 不幸的是,python似乎沒有提供調用semop系統調用的方法。

如果您使用的是Python 2.6,則可以使用條件類 multiprocessing module

2

我想出了使用管道文件描述符的想法,父母可以選擇寫入然後讀取/刷新,但這並不能作爲非常優雅的設計。

的詳細信息:母公司將創建一個管道,子進程將繼承它的父進程將寫入管,從而喚醒任何子select():荷蘭國際集團的文件描述符,但然後會立即從管道的讀取端讀取並清空它 - 唯一的影響是管道上的那些子進程已被喚醒。

正如我所說,這感覺很奇怪和醜陋,但我還沒有發現任何更好的東西。

編輯:

事實證明這行不通 - 一些子進程被喚醒,有些則不是。我使用了multiprocessing模塊的Condition