python - 访问 dask 集群中分散数据的成本
问题描述
我使用 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_dict.result()[key]
速度很慢。在 worker 中进行查找所需的时间类似于 unpickl'ing 的腌制版本large_dict
,所以我猜我的字典在每个 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 )
推荐阅读
- php - 为什么我上传的图片没有显示在我的 Laravel 网站上?
- reactjs - 输入reactjs时如何屏蔽字符串
- firebase - 错误:HTTP 错误:403,调用者没有权限 - 在颤振中创建云函数时
- postgresql - psql - 无法执行命令 - 权限被拒绝错误
- r - R RefClass 从列表继承
- php - 从函数“外部”返回值
- spring-boot - open api 3 默认数组生成
- docker - Kubernetes pod 不断崩溃。使用相同的 docker 映像,我构建了运行良好的 docker 容器
- mongodb - MongoDB - 获取与“深”数组中的条件匹配的所有元素
- c# - 我可以在方法体中创建对结构实例的临时引用吗?