Python多处理的进程通信

Qua*_*rgy 8 python ipc pipe shared-memory multiprocessing

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

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

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

  • 其中哪些只用于父子关系或兄弟情谊,可以在独立进程或不同主机之间进行通信?

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

提前致谢.

nox*_*fox 4

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

以下是一个简短的答案。

  1. 多处理侦听器和客户端允许选择命名管道作为传输介质。
  2. 文档中:

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

    multiprocessing.sharedctypes您无法跨没有父/子关系的进程使用功能。

  3. 管理器监听器和客户端跨不同主机上的进程工作,或者没有父/子关系。套接字AF_INET系列可以在不同的主机上使用。尽管如此,我还是建议不要这样做。而是使用网络套接字或其他一些抽象机制。
  4. 文档中很好地说明了差异和特征。

Pythonmultiprocessing模块最初是通过threadingAPI 实现的。到那时,它支持的功能有所增加,但核心思想保持不变。该multiprocessing模块旨在处理 Python 进程系列。对于任何其他用途,该subprocess模块是更好的选择。

对于跨多个主机分配任务和作业,有更好的解决方案抽象低级基础设施。您可以查看 Python 项目(例如CeleryLuigi)或更复杂的基础设施(例如Apache Mesos)