【问题标题】:python different child processes and communicationpython不同的子进程和通信
【发布时间】:2013-11-03 19:20:41
【问题描述】:

最初的问题here

我的 python 项目中有一个架构:主应用程序进程产生许多子进程。主进程监听网络连接,然后接收数据主进程将该数据传递给所有子进程,而不相互监听。子进程可能会执行或不执行操作(取决于接收到的数据),如果他们需要执行操作 - 他们必须向主进程发送消息,让它通过其网络连接将数据发送到服务器。对于我的架构,我想,拥有一个通常由observer pattern from head of four 实现的回调架构会很好。

我有一个不仅仅是并行工作者的进程 - 它是不同的子进程,它们可以对可能从管道/队列接收的相同数据执行不同的操作,但如果我将我的代码调整为队列,那么子进程必须使用task_queue.get() 从父进程获取数据,但如果多个子进程之一将从 task_queue 获取任何任务 - 其他进程将不会收到该数据并且不会执行操作。我需要将 task_queue 中的每个任务传递给所有子进程并听取他们的回答。

我已经尝试通过管道实现该功能 - 但它需要大量数据(至少存储管道)并且我不知道如何通过许多进程实现管道功能 - 我在任何地方都看到了它的示例一个管道,它是while True:inifinite 循环 - 因此我不能使用它,因为主进程现在不知道要监听所有子进程中的哪一个(实际上只有一个旧子进程会执行操作)。

我也尝试通过队列来实现它 - 但如果其中一个子进程将调用“task_queue.get()” - 它将从任务队列中删除该项目,但我需要将该数据传递给我的所有孩子过程。另外,在这两种方法中,我都需要监听所有子进程,但我想成为他们动作的观察者——如果某些子进程想要执行一个动作——它将数据发送到主进程,然后在主进程中调用回调-函数和...

我对 python 很了解,请告诉我如何实现这个东西。

【问题讨论】:

  • Python select 模块允许您同时在多个管道上等待 I/O。

标签: python callback multiprocessing


【解决方案1】:

我建议在生成 n 个子进程之前在父进程中创建 n 个管道或队列。然后每个子进程都有一个用于通信的管道或队列。

【讨论】:

    猜你喜欢
    • 2017-07-22
    • 1970-01-01
    • 2018-05-13
    • 2012-07-07
    • 2011-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多