python不同的子进程和通信

时间:2013-11-03 19:20:41

标签: python callback multiprocessing

初步问题here

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

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

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

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

我知道python,请告诉我如何实现这一点。

1 个答案:

答案 0 :(得分:0)

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