Python 的 Multiprocessing 的进程通信

Process communication of Python's Multiprocessing

我了解了 Python 多进程的 Pipes/Queues/Shared ctypes Objects/Managers,我想将它们与 Linux 的匿名管道、命名管道、共享内存进行比较、插座等。我现在有以下问题

提前致谢。

您的问题很宽泛,大部分答案都可以在 multiprocessing 模块文档中找到。

下面是一个简短的回答。

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

    The multiprocessing.sharedctypes module provides functions for allocating ctypes objects from shared memory which can be inherited by child processes.

    您不能在没有 parent/child 关系的进程中使用 multiprocessing.sharedctypes 功能。

  3. Managers and Listeners and Clients 跨进程工作在不同主机上或没有 parent/child 关系。 AF_INET 套接字系列可以跨不同的主机使用。尽管如此,我还是建议不要这样做。而是使用网络套接字或其他一些抽象机制。
  4. 差异和特征在 documentation 中得到了很好的说明。

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

对于在多个主机上分配任务和工作,有更好的解决方案来抽象低级基础设施。你可以看看 Python 项目,例如 Celery or Luigi or more complex infrastructures such as Apache Mesos.