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