代码之家  ›  专栏  ›  技术社区  ›  Teddy

如何“信号”感兴趣的子进程(无信号)?

  •  1
  • Teddy  · 技术社区  · 15 年前

    我正试图找到一种好的简单的方法来通知子进程 (通过具有forkingmixin的socketserver创建)从父级 过程。

    虽然可以使用Unix信号,但我想避免它们,因为 感兴趣的孩子应该收到信号 过度杀戮和需要某种登记的复杂性 识别感兴趣的父进程的机制。

    (请不要建议线程,因为这个特定的程序无法工作 带螺纹,因此必须使用叉子。)

    2 回复  |  直到 14 年前
        1
  •  3
  •   Mark Borgerding    15 年前

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

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

        2
  •  2
  •   Teddy    14 年前

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

    更详细地说:父进程将创建管道,子进程将继承管道,父进程将写入管道,从而唤醒任何子进程 select() :使用文件描述符,但是 起源 然后立即从管道的读取端读取并清空它-唯一的效果是那些子进程 选择() 管上的孩子醒了。

    正如我所说,这让人觉得奇怪和丑陋,但我还没有发现比这更好的东西。

    编辑:

    结果发现这不起作用-有些孩子的过程被唤醒,而有些没有。我已经使用 Condition multiprocessing 模块。