Python 访问dask群集中分散数据的成本

Python 访问dask群集中分散数据的成本,python,dask,dask-distributed,Python,Dask,Dask Distributed,我使用dask来并行一些处理,这是一件非常有趣的事情 我有一个案例,客户端的计算需要一些查找数据,这些数据很难生成,因此将这些数据分散到客户端: [future_dict] = client.scatter([large_dict], broadcast=True) 计算结果如下 def worker(i): key = do_some_work() data = future_dict.result()[key] res = do_some_more_work( d

我使用dask来并行一些处理,这是一件非常有趣的事情

我有一个案例,客户端的计算需要一些查找数据,这些数据很难生成,因此将这些数据分散到客户端:

[future_dict] = client.scatter([large_dict], broadcast=True)
计算结果如下

def worker(i):
    key = do_some_work()
    data = future_dict.result()[key] 
    res = do_some_more_work( data )
    return (i, res )

f = client.map( worker, range(200))
res = client.gather( f )
这是可行的,但是查找
future\u dict.result()[key]
相当慢。在worker中执行查找所需的时间类似于取消pickl'ing
large_dict
的pickle版本,因此我猜我的字典在每个worker中反序列化


我能做些什么来加快对分散数据的访问吗?例如,如果我对每个worker中的数据反序列化的假设是正确的,那么我是否可以采取措施使反序列化只在每个客户机中发生一次?

您所做的应该是正确的,但是如果您想让它更快,您可以在将来传递一个明确的参数

def func(i, my_dict=None):
    key = do_some_work()
    data = my_dict[key] 
    res = do_some_more_work( data )
    return (i, res )

f = client.map( func, range(200), my_dict=future_data)
res = client.gather( f )

非常感谢,你的回答解决了问题。开销pr呼叫从60毫秒变为1毫秒