Python的多处理过程通信

时间:2018-04-29 08:02:15

标签: python multiprocessing pipe ipc shared-memory

我已经了解了Python多进程的管道/队列/共享ctypes对象/管理器,我想将它们与Linux的匿名管道,命名管道,共享内存,套接字和等等。我现在有以下问题

  • Python的多处理管道和队列模块基于匿名管道。它是否提供命名管道?

  • Python multiprocessing.sharedctypes是否支持独立进程 通讯?我认为它只支持父子过程或 兄弟般的过程沟通。

  • 其中哪一项仅用于亲子关系或 兄弟情谊,可以在独立进程之间进行沟通 或不同的主人?

  • 他们各自的特点是什么,我应该如何选择?

提前致谢。

1 个答案:

答案 0 :(得分:4)

您的问题非常广泛,大多数答案都可以在multiprocessing模块文档中找到。

以下是一个简短的回答。

  1. multiprocessing Listeners and Clients允许选择命名管道作为传输介质。
  2. 来自documentation

      

    multiprocessing.sharedctypes模块提供了从共享内存中分配ctypes对象的函数,这些函数可以由子进程继承。

    您不能在不具有父/子关系的流程中使用multiprocessing.sharedctypes功能。

  3. ManagersListeners and Clients跨不同主机上的进程工作,或者没有父/子关系。 AF_INET套接字系列可以在不同的主机上使用。不过,我建议不要这样做。而是使用网络套接字或其他一些抽象机制。
  4. documentation中很好地说明了差异和特征。
  5. Python multiprocessing模块最初是在threading API上实现的。到目前为止,它在支持的功能方面有所增长,但核心理念仍然保持不变。 multiprocessing模块旨在处理Python进程系列。对于任何其他用途,subprocess模块是更好的选择。

    为了在多个主机上分配任务和作业,有更好的解决方案来抽象低级基础架构。您可以查看Python项目,例如CeleryLuigi或更复杂的基础架构,例如Apache Mesos