Python使用multiprocessing pool.map进行分布式计算
下面的代码可以让“someprogram”这个程序同时处理50个输入文件,使用5个工作线程。那怎么做到在这台电脑上用5个工作线程,而在另一台电脑上用7个工作线程呢?这只用到了像multiprocessing这样的标准库。理想情况下,我希望有一个包含元组的列表(比如(主机名,工作线程数量)),这样可以加快某些操作,甚至可以把它做成一个装饰器,这样在像“commandlinestuff”这样的函数上就能更方便地重复使用了。(使用的是Linux和Python 2.7)
import multiprocessing
import subprocess
def commandlinestuff(inputfilename):
p = subprocess.Popen("someprogram "+inputfilename, shell=True)
p.wait()
inputfilenames = ["something"+str(i).zfill(2)+".in" for i in range(50)]
p = multiprocessing.pool(5)
p.map(commandlinestuff, inputfilenames)
2 个回答
0
听起来你想要重新发明一个叫做 pyro 的东西。这个东西是用纯Python写的,但现在并不是Python标准库的一部分。
简单来说,你需要在远程机器上运行一个服务器,这个服务器可以接受连接,接收一个被“腌制”的对象(也就是经过处理的数据)来执行(可能还会有一些其他数据),然后执行这个对象并把结果返回给你。你还需要在本地机器上有一个客户端,它负责发送请求,收集结果,可能还要进行一些负载均衡。
在 Python wiki 的并行处理部分,有很多工具可以用来做这些事情,每种工具都有自己的优缺点。
0
这个链接 https://code.google.com/p/distributed-python-for-scripting/ 对我来说非常有效——不需要安装任何东西,而且看起来是用Python进行多进程处理最简单、最快捷的方法。