我正在尝试重写一个用类开发的整个项目。渐渐地,最重的计算块应该并行化,显然我们有很多独立的顺序循环。一个模仿行为的类的例子是这个玩具问题(我是一个痴迷于p-sums的数学家):
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替代方案?我看到了很糟糕的减速,我将其归结为传递数据。