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