我试图找到一个很好的,简单的方法来从父 进程发信号子进程 (通过SocketServer与ForkingMixIn创建)。如何“发信号”感兴趣的子进程(没有信号)?
虽然可以使用Unix的信号,我想避开他们,因为只有 孩子谁是兴趣应接收信号,这将是 矫枉过正而复杂,要求某种登记 机制来识别父进程谁有兴趣。
(请不要建议线程,这个特定的程序将无法正常工作 与线程,因此必须使用叉子。)
我试图找到一个很好的,简单的方法来从父 进程发信号子进程 (通过SocketServer与ForkingMixIn创建)。如何“发信号”感兴趣的子进程(没有信号)?
虽然可以使用Unix的信号,我想避开他们,因为只有 孩子谁是兴趣应接收信号,这将是 矫枉过正而复杂,要求某种登记 机制来识别父进程谁有兴趣。
(请不要建议线程,这个特定的程序将无法正常工作 与线程,因此必须使用叉子。)
既然你是在unix系统上,信号量应该是简单的答案。 不幸的是,python似乎没有提供调用semop系统调用的方法。
如果您使用的是Python 2.6,则可以使用条件类 multiprocessing module。
我想出了使用管道文件描述符的想法,父母可以选择写入然后读取/刷新,但这并不能作为非常优雅的设计。
的详细信息:母公司将创建一个管道,子进程将继承它的父进程将写入管,从而唤醒任何子select()
:荷兰国际集团的文件描述符,但父然后会立即从管道的读取端读取并清空它 - 唯一的影响是管道上的那些子进程已被唤醒。
正如我所说,这感觉很奇怪和丑陋,但我还没有发现任何更好的东西。
编辑:
事实证明这行不通 - 一些子进程被唤醒,有些则不是。我使用了multiprocessing
模块的Condition
。