我有一个较大的对象(150 MB),需要将其广播给所有敏捷的分布式工作人员,以便可以在将来的任务中使用。我尝试了几种方法:
Client.scatter(broadcast=True)
:这需要从一台机器(我正在运行客户端和调度程序)上发送所有数据,这会造成带宽瓶颈。Client.submit
后跟Client.replicate
:这些工作程序共享一个文件系统,因此我可以安排加载数据的任务,然后将数据复制到所有工作程序,而不是发送数据。这似乎是使用树策略来分发数据,这比以前的选择要快。但是,强制每个工作程序在本地运行加载数据功能而不是将数据加载到一个工作程序上并在每个工作程序之间序列化的速度可能更快。有没有办法做到这一点? Client.run
似乎是我想要的一部分,但是我需要找回将来要加载的数据,以便以后传递给其他任务。
答案 0 :(得分:0)
这里的简短答案是“否”,没有简单的方法可以完成此操作。但是,如果您愿意使用内部代码(可能会在不发出警告的情况下进行更改),则可以一起破解某些东西。
另一种方法是定义对象序列化方式的计算行为,然后只需在反序列化代码中再次调用该函数即可。
答案 1 :(得分:0)
我遇到的问题与我在StackOverflow上提出的问题完全相同,最近又解决了,请参见this作为解决方案。