我有以下代码串行运行来请求一堆网址:
# 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)
如果我想提高速度,那么我如何将这个过程分散到多个服务器上,这样做的好方法是什么?
答案 0 :(得分:2)
您可以使用pathos
(以及它的姐妹包pyina
)来帮助您确切了解您希望如何并行分发代码。
pathos
为跨线程,多处理和套接字的并行处理提供了统一的API。 API提供Pool
个对象,这些对象具有阻塞,非阻塞迭代和异步map
和pipe
方法。 pyina
将此API扩展到MPI
以及torque
和slurm
等计划程序。通常,您可以嵌套这些构造,以便进行异构和分层并行分布式计算。
您根本无需修改代码即可使用pathos
(以及pyina
)。
在SO上有一些这样的例子,包括: Python Multiprocessing with Distributed Cluster Using Pathos和 Python Multiprocessing with Distributed Cluster
以及examples
,pathos
和pyina
中的mystic
目录 - 在此处找到:
https://github.com/uqfoundation