我正在尝试重写一个用类开发的整个项目。渐渐地,最重的计算块应该被并行化,显然我们有很多独立的顺序循环。模仿行为的类的一个例子是这个玩具问题(我是一个痴迷于 p-sum 的数学家):
class Summer:
def __init__(self, p):
self.p = p
def sum(self):
return sum(pow(i,-self.p) for i in range(1,1000000))
total = sum([Summer(p).sum() for p in range(2,20)])
如果我将最后一行替换为:
from dask.distributed import Client
def psum(p): return Summer(p).sum()
client = Client()
A = client.map(psum,range(2,20))
total=client.submit(sum,A).result()
我的运行时间减少了 4(我的机器上可用的内核数)。如果我使用数据密集型的真实类(大熊猫结构占用内存),这种理想行为不会持续存在。是否有 dask.distributed 的推荐替代方案?我看到严重的减速,我将其归因于传递的数据。