使用multiprocessing模块进行集群计算
我想在一个计算机集群上运行一个Python程序。之前我用过Python的MPI接口,但因为安装和编译这些东西有点麻烦,所以我更希望能用一些内置的模块,比如Python的multiprocessing模块。
我真正想做的是设置一个multiprocessing.Pool
实例,让它可以跨越整个计算机集群,然后运行Pool.map(...)
。这样做可行吗?简单吗?
如果这样做不行,我至少希望能从一个中心脚本出发,在集群中的每个节点上启动Process
实例,并且为每个节点设置不同的参数。
4 个回答
14
以前我用过Pyro来做到这一点,效果非常好。如果你开启了移动代码的功能,它会自动把节点所需的模块发送过去,前提是这些模块节点还没有。这真是个很酷的功能。
52
如果你说的集群计算是指分布式内存系统(也就是多个节点,而不是单一的对称多处理器系统),那么Python的多进程模块可能不太适合。虽然它可以启动多个进程,但这些进程还是会局限在同一个节点上。
你需要的是一个框架,它可以在多个节点之间启动进程,并提供处理器之间的通信机制。这基本上就是MPI所做的事情。
你可以查看Python维基上的并行处理页面,里面有一些可以帮助你进行集群计算的框架列表。
在这些框架中,pp、jug、pyro和celery看起来都是不错的选择,虽然我个人没有使用过这些框架(我主要使用MPI)。
如果你觉得安装和使用的简单性很重要,我建议你先看看jug
。它安装起来很简单,支持常见的批处理集群系统,而且文档也写得很好。