4

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

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

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

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

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


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

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

(如果这很重要,我正在使用 a Linux

4

2 回答 2

5

你不能比较苹果和橘子。

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

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

他们做不同的工作。

于 2011-07-05T02:17:02.130 回答
1

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

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

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

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

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

于 2011-07-05T04:35:47.703 回答