如何“发出信号”感兴趣的子进程(没有信号)?

时间:2010-05-10 17:39:37

标签: python unix fork subprocess signals

我正在尝试找一个好的,简单的方法来表示子进程 (从父级使用ForkingMixIn通过SocketServer创建) 过程

虽然可以使用Unix信号,但我只想避免使用它们 有兴趣的孩子应该收到信号,而且会是 过度和复杂,需要某种注册 用于识别感兴趣的父进程的机制。

(请不要建议线程,因为这个特定的程序不起作用 有线程,因此必须使用分叉。)

2 个答案:

答案 0 :(得分:3)

由于您使用的是unix系统,信号量应该是简单的答案。 不幸的是,python似乎没有提供调用semop系统调用的方法。

如果您使用的是python 2.6,则可以使用 multiprocessing module条件类。

答案 1 :(得分:2)

我想到了使用父文件可以编写的管道文件描述符然后与select一起读取/刷新的想法,但这并不是一个非常优雅的设计。

更详细:父进程将创建一个管道,子进程将继承它,父进程将写入管道,从而唤醒任何子进程select():文件描述符,但 parent 然后会立即从管道的读取端读取并清空它 - 唯一的影响是那些管道上select()的子进程已经唤醒了。

正如我所说,这感觉奇怪而且丑陋,但我还没有发现任何更好的东西。

修改

事实证明,这不起作用 - 一些子进程被唤醒,有些则没有。我已经使用Condition模块中的multiprocessing