多核Python:多处理比.zeroMQ?

use*_*424 4 python multiprocessing zeromq

我想编写python加载数据集作为输入并分析它的代码.

将有5个并行流程来分析数据 - 每个流程将以不同的方式处理数据.

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

我希望所有不同的进程将其输出写入上面提到的相同列表(意味着,每个进程都能够直接操作master脚本中定义的列表).

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


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

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

(如果在所有方面,我使用的是Linux)

Mic*_*lon 5

你无法比较苹果和橘子.

multiprocessing是一个用于分叉许多进程的库.

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

他们做不同的工作.

  • 我猜 OP 在多处理队列和 zeromq 做事方式之间询问。 (2认同)

Joe*_*way 1

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

Python 多处理模块用于在单台机器上跨进程/核心分配负载。据我所知,多处理模块底层没有网络协议,随附文档的第一段表明了这一点。

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

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

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

  • 事实上,多处理模块可用于在网络系统上创建进程间通信。这可以通过[管理器](http://docs.python.org/library/multiprocessing.html#module-multiprocessing.managers)来完成。 (3认同)
  • 我是 ZeroMQ 的粉丝,所以我的目的并不是引导您远离它。我只是想(对于未来的旅行者)澄清,在 Python 中进行进程间/分布式消息传递的方法不止两种。 (2认同)