繁体   English   中英

多核 Python:多处理 Vs。 零MQ?

[英]Multi-Core Python: multiprocessing Vs. zeroMQ?

我想编写python代码,将数据集加载为输入并对其进行分析。

将有 5 个并行进程以独特的方式分析数据——每个进程将以不同的方式处理数据。

在任何处理开始之前, master脚本(将“启动”所有不同子流程的脚本)将定义一个空列表。

我希望所有不同的进程都将它们的 output 写入上述相同的列表(这意味着,每个进程都将能够直接操作master脚本中定义的列表)。

这意味着,如果process1更改了该列表的第一个值,则所有其他进程(在运行时)将看到该列表的第一个值已更改。


我感觉可以使用 2 个不同的python模块来解决这个问题: multiprocessingzeroMQ

在这种情况下,是否有任何理由更喜欢一个与另一个? 如果——而不是在同一台服务器上运行master脚本——我将在不同(多个)服务器之间拆分进程,你的答案会改变吗?

(如果这很重要,我使用的是Linux

你不能比较苹果和橘子。

multiprocessing 是一个 fork 多个进程的库。

zmq 是一个允许进程使用消息进行通信的库。

他们做不同的工作。

如果这是您仅有的两个选择,并且您确定要在多台机器上分配负载,那么 ZeroMQ 是这两个选择中唯一符合要求的选择。

Python 多处理模块用于在单个机器上的进程/内核之间分配负载。 据我所知,多处理模块底层没有网络协议,这在随附文档的第一段中有所说明。

ZeroMQ 可以通过其 IPC 协议在单台机器上用于类似的进程间消息传递,但它也具有基于网络的协议,允许您在不同机器上运行的进程之间发送消息。

也就是说,这个问题带有 XY 问题的轻微色彩,因为您似乎任意将选择范围缩小到使用 Python 实现分布式程序的众多可能性中的两个。

编辑我在这里的答案不正确,我无法删除已接受的答案,因此将其转换为 wiki,以防有人想要更正它。 简短的故事是我匆忙误读了文档。 Python 多处理确实支持跨网络边界的进程间通信。 与 ZeroMQ 的一个主要区别是 ZeroMQ 设计为与平台无关,因此您可以在不同平台上混合客户端/服务器代理,而 Python 多处理是一个包含电池的选项,如果客户端/服务器进程耦合到 Python。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM