我試圖找到一個很好的,簡單的方法來從父 進程發信號子進程 (通過SocketServer與ForkingMixIn創建)。如何「發信號」感興趣的子進程(沒有信號)?
雖然可以使用Unix的信號,我想避開他們,因爲只有 孩子誰是興趣應接收信號,這將是 矯枉過正而複雜,要求某種登記 機制來識別父進程誰有興趣。
(請不要建議線程,這個特定的程序將無法正常工作 與線程,因此必須使用叉子。)
我試圖找到一個很好的,簡單的方法來從父 進程發信號子進程 (通過SocketServer與ForkingMixIn創建)。如何「發信號」感興趣的子進程(沒有信號)?
雖然可以使用Unix的信號,我想避開他們,因爲只有 孩子誰是興趣應接收信號,這將是 矯枉過正而複雜,要求某種登記 機制來識別父進程誰有興趣。
(請不要建議線程,這個特定的程序將無法正常工作 與線程,因此必須使用叉子。)
既然你是在unix系統上,信號量應該是簡單的答案。 不幸的是,python似乎沒有提供調用semop系統調用的方法。
如果您使用的是Python 2.6,則可以使用條件類 multiprocessing module。
我想出了使用管道文件描述符的想法,父母可以選擇寫入然後讀取/刷新,但這並不能作爲非常優雅的設計。
的詳細信息:母公司將創建一個管道,子進程將繼承它的父進程將寫入管,從而喚醒任何子select()
:荷蘭國際集團的文件描述符,但父然後會立即從管道的讀取端讀取並清空它 - 唯一的影響是管道上的那些子進程已被喚醒。
正如我所說,這感覺很奇怪和醜陋,但我還沒有發現任何更好的東西。
編輯:
事實證明這行不通 - 一些子進程被喚醒,有些則不是。我使用了multiprocessing
模塊的Condition
。