将串行转换为并行转换为多机器

时间:2015-01-03 02:05:19

标签: python

我有以下代码串行运行来请求一堆网址:

# takes 5 hours
data = []
for url in urls:
    data.append(request_url(url))

然后我使用多处理将其转换为并行运行:

# takes 50 minutes
p = Pool(20)
data = p.map(request_url, urls)

如果我想提高速度,那么我如何将这个过程分散到多个服务器上,这样做的好方法是什么?

1 个答案:

答案 0 :(得分:2)

您可以使用pathos(以及它的姐妹包pyina)来帮助您确切了解您希望如何并行分发代码。

pathos为跨线程,多处理和套接字的并行处理提供了统一的API。 API提供Pool个对象,这些对象具有阻塞,非阻塞迭代和异步mappipe方法。 pyina将此API扩展到MPI以及torqueslurm等计划程序。通常,您可以嵌套这些构造,以便进行异构和分层并行分布式计算。

您根本无需修改代码即可使用pathos(以及pyina)。

在SO上有一些这样的例子,包括: Python Multiprocessing with Distributed Cluster Using PathosPython Multiprocessing with Distributed Cluster

以及examplespathospyina中的mystic目录 - 在此处找到: https://github.com/uqfoundation