use*_*424 4 python multiprocessing zeromq
我想编写python加载数据集作为输入并分析它的代码.
将有5个并行流程来分析数据 - 每个流程将以不同的方式处理数据.
在开始任何处理之前,master脚本(将"启动"所有不同子进程的脚本)将定义一个空列表.
我希望所有不同的进程将其输出写入上面提到的相同列表(意味着,每个进程都能够直接操作master脚本中定义的列表).
意思是,如果process1更改了该列表的第一个值,则所有其他进程(运行时)将看到该列表的第一个值已更改.
我感觉python可以使用2个不同的模块来解决这个问题:multiprocessing和zeroMQ.
在这种情况下,有没有理由更喜欢一个与另一个?你的答案会改变master吗- 而不是在同一台服务器上运行脚本 - 我会在不同(多个)服务器之间拆分进程吗?
(如果在所有方面,我使用的是Linux)
你无法比较苹果和橘子.
multiprocessing是一个用于分叉许多进程的库.
zmq是一个允许进程使用消息进行通信的库.
他们做不同的工作.
如果这是您仅有的两个选择,并且您确信您将在多台机器上分配负载,那么 ZeroMQ 是这两个选择中唯一符合要求的选择。
Python 多处理模块用于在单台机器上跨进程/核心分配负载。据我所知,多处理模块底层没有网络协议,随附文档的第一段表明了这一点。
ZeroMQ 可以通过其 IPC 协议在单台机器上用于类似的进程间消息传递,但它也具有基于网络的协议,允许您在不同机器上运行的进程之间发送消息。
也就是说,这个问题有点像XY 问题,因为您似乎任意地将选择范围缩小到使用 Python 实现分布式程序的众多可能性中的两种。
编辑我的答案不正确,我无法删除已接受的答案,因此将其转换为 wiki,以防有人想要更正它。简而言之,我匆忙地误读了文档。Python 多处理确实支持通过网络边界的进程间通信。与 ZeroMQ 的一个主要区别是,ZeroMQ 被设计为与平台无关,因此您可以在不同平台上混合客户端/服务器代理,而如果客户端/服务器进程与 Python 耦合,则 Python 多处理是一个包含电池的选项。