我了解了 Python 多进程的 Pipes/Queues/Shared ctypes Objects/Managers,我想将它们与 Linux 的匿名管道、命名管道、共享内存、套接字等进行比较。我现在有以下问题
Python的多处理的管道和队列模块都是基于匿名管道的。它是否提供命名管道?
Python multiprocessing.sharedctypes是否支持独立进程 沟通?我觉得它只支持父子进程或者 兄弟进程通信。
哪些只用在亲子过程中 兄弟情谊,可以在独立进程之间进行通信 还是不同的主机?
它们各自有什么特点,应该如何选择?
提前致谢。
最佳答案
您的问题很广泛,大部分答案都可以在multiprocessing
模块文档中找到。
下面是一个简短的回答。
- multiprocessing Listeners and Clients允许选择命名管道作为传输介质。
来自 documentation :
The multiprocessing.sharedctypes module provides functions for allocating ctypes objects from shared memory which can be inherited by child processes.
您不能在没有父/子关系的进程中使用
multiprocessing.sharedctypes
功能。- Managers和 Listeners and Clients在不同主机上或没有父/子关系的进程中工作。
AF_INET
套接字系列可用于不同的主机。尽管如此,我还是建议不要这样做。而是使用网络套接字或其他一些抽象机制。 - 差异和特征在 documentation 中得到了很好的说明。 .
Python multiprocessing
模块最初是通过 threading
API 实现的。到那时,它支持的功能有所增加,但核心思想保持不变。 multiprocessing
模块旨在处理 Python 进程系列。对于任何其他用途,subprocess
模块是更好的选择。
对于在多个主机之间分配任务和作业,有更好的解决方案来抽象低级基础设施。您可以查看 Python 项目,例如 Celery或 Luigi或更复杂的基础设施,例如 Apache Mesos .
关于python - Python的Multiprocessing之进程通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50084557/