与多个从属进程通信(每个从属一个 multiprocessing.Queue 实例)

Communicate with multiple slave processes (one multiprocessing.Queue instance per slave)

我设计了一种通过在多个从属进程之间分配工作来并行化特定任务的方法。所以我想出的设计是这样的:

正如我所指出的,最后一点是困难的部分,因为我在 Python 的多处理参考中找不到任何允许我等待 MULTIPLE multiprocessing.Queue 同时发生。除了 multiprocessing.Queue 对象外,我基本上需要类似 Microsoft 的 WaitForMultipleObjects 或 POSIX select 的东西。代替这样的功能,我想我可以让我的主进程忙等待/轮询从进程队列,并在各个轮询周期之间使用适当的睡眠间隔,但这是我想避免的事情,除非没有其他方法。此外,虽然我在 Windows 机器上,但我对实施任何 Windows 特定的解决方案犹豫不决,因为我希望尽可能保持平台独立。

有没有人有什么想法?

编辑:忘记提及主从都是关于这些队列的读者和作者。

编辑:为了排除混淆,我必须对特定子进程进行排队并且不能将其传递给任意子进程的原因是我正在 ClearCase VOB 中搜索动态链接,并且让多个进程在特定 VOB 上运行实际上可能会减慢速度。我只希望每个 VOB 有一个子进程,并且该进程应该是唯一一个在该 VOB 中搜索链接的进程。

听起来像任务队列

https://en.wikipedia.org/wiki/Thread_pool

但是使用单向队列会容易得多。

您想使用一个队列将作业发布到适当的线程。完成的任务可以在单独的队列中返回,这样 master 就可以等待它了。如果线程创建了一个新任务,可以用同样的方式处理——主线程可以为适当的工作线程重新发布它。

但是,如果每个工作人员都有自己的任务队列,那么似乎没有任何理由对它们进行多线程控制。他们可能能够 运行 每个内部线程,并有一个成员函数来分配一个新任务。主线程更像是一个调度程序,它只是将任务直接分配给应该处理它的对象,然后在分配任务之间等待响应队列。