【问题标题】:How to "signal" interested child processes (without signals)?如何“发出信号”感兴趣的子进程(没有信号)?
【发布时间】:2011-02-17 19:08:44
【问题描述】:

我正在尝试找到一种简单的好方法来向子进程发出信号 (通过带有 ForkingMixIn 的 SocketServer 创建)来自父级 过程。

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

(请不要推荐线程,因为这个特定的程序不会工作 使用线程,因此必须使用分叉。)

【问题讨论】:

    标签: python unix fork subprocess signals


    【解决方案1】:

    我想出了使用管道文件描述符的想法,父级可以写入,然后结合 select 进行读取/刷新,但这并不是一个非常优雅的设计。

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

    正如我所说,这感觉奇怪而丑陋,但我还没有找到更好的东西。

    编辑:

    事实证明这是行不通的——有些子进程被唤醒,有些则没有。我已经使用了来自multiprocessing 模块的Condition

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 2010-10-29
        • 1970-01-01
        • 2011-01-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-07-12
        • 1970-01-01
        相关资源
        最近更新 更多