繁体   English   中英

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

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

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

  • 主进程创建一个multiprocessing.Queue实例,它从每个从属进程启动。
  • 然后,主任务通过multiprocessing.Process创建从属进程,并传递multiprocessing.Queue实例,此特定子进程应使用该实例与主进程进行通信。
  • 接下来,这是关键部分,主进程将等待所有multiprocessing.Queue实例。 每当任何队列上有活动时,我都希望它唤醒,读取从属进程在该特定队列中放置的任何消息,并对其进行处理。

正如我已经指出的那样,最后一点是困难的部分,因为我在Python的多处理参考中找不到任何可以让我同时等待MULTIPLE multiprocessing.Queue实例的东西。 除了multiprocessing.Queue对象外,我基本上需要像Microsoft的WaitForMultipleObjects或POSIX select东西。 代替这种功能,我想我可以让主进程忙于等待/轮询从属进程队列,并在各个轮询周期之间以适当的睡眠间隔进行轮询,但是除非没有其他方法,否则我想避免这种情况。 另外,尽管我在Windows机器上,但是我还是不愿实现任何特定于Windows的解决方案,因为我想使事情尽可能与平台无关。

有人有什么想法吗?

编辑:忘了提及,相对于这些队列,主服务器和从服务器都是读取器和写入器。

编辑:为了排除混乱,我必须加入特定子流程的工作,而不能仅仅将其传递给任意子流程的原因是,我正在ClearCase VOB中搜索动态链接,并且有多个流程在特定的VOB上操作实际上可能会减慢速度。 我希望每个VOB恰好有一个子进程,并且该进程应该是该VOB中唯一的一个搜索链接。

听起来像一个任务队列

https://zh.wikipedia.org/wiki/线程池

但是单向队列将更容易使用。

您想使用一个队列将作业发布到适当的线程。 完成的任务可以在单独的队列中返回,以便主服务器可以等待。 如果线程创建了新任务,则可以用相同的方式处理它-主线程可以为适当的工作人员重新发出该任务。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM