python - Python的Multiprocessing之进程通信

标签 python multiprocessing pipe ipc shared-memory

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

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

  • Python multiprocessing.sharedctypes是否支持独立进程 沟通?我觉得它只支持父子进程或者 兄弟进程通信。

  • 哪些只用在亲子过程中 兄弟情谊,可以在独立进程之间进行通信 还是不同的主机?

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

提前致谢。

最佳答案

您的问题很广泛,大部分答案都可以在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.

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

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

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

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

关于python - Python的Multiprocessing之进程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084557/

相关文章:

python时间减法

Python 多处理池 : dynamically set number of processes during execution of tasks

python - Python中的多处理内存错误

c - C 中的 Linux 管道

c - 从管道中读取整数会跳过 C 中的值

c - C 中的管道 - 我必须使用 fork 吗?

python - 如何将 pandas 数据框的数据类型更改为具有定义格式的字符串?

python - 等到具体时间

python - python 会接受 - (破折号)作为 `open()` 的文件名写入标准输出吗?

Python 多进程分析