Dask distributed支持work stealing,它可以加速计算并使其更加健壮,但是,每个任务可以运行多次。
在这里,我要求一种方法来“整理”那些对最终结果没有贡献的工人的结果。为了说明我的要求:
我们假设,每个工作人员都在进行蒙特卡罗模拟,并将~10GB模拟结果保存在结果文件夹中。在工作窃取的情况下,模拟结果将被存储若干次,因此希望仅保留其中一个。实现这一目标的最佳方法是什么? dask.distributed可以自动调用一些“最后整理”的程序来处理最终没有结果的任务吗?
编辑: 我目前使用以下代码开始模拟:
c = distributed.Client(myserver)
mytask.compute(get = c.get) #mytask is a delayed object
所以我想,之后所有数据都会从群集中删除,如果我在计算后“查看存在于多个位置的数据”,则无法保证我能找到相应的任务吗?此外,我目前还不清楚如何将未来对象的ID映射到相应任务保存其结果的文件名。我目前依靠tempfile来避免名称冲突,因为蒙特卡罗模拟的设置是最简单的。
答案 0 :(得分:1)
目前,被盗任务和非任务之间的Dask没有区别。
如果需要,您可以查看存在于多个位置的数据,然后使用以下操作将命令直接发送给这些工作人员: