Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果任务之间的数据流很大,利用dask多处理调度程序的最有效方法是什么?_Python_Parallel Processing_Dask - Fatal编程技术网

Python 如果任务之间的数据流很大,利用dask多处理调度程序的最有效方法是什么?

Python 如果任务之间的数据流很大,利用dask多处理调度程序的最有效方法是什么?,python,parallel-processing,dask,Python,Parallel Processing,Dask,我们有一个dask计算图(非常定制,所以我们使用dask延迟而不是集合)。我在文档中读到,当前的调度策略是后进先出(LIFO),因此工作进程有很大的机会获得它刚刚计算的数据,以便在图表中进行下一步操作。但据我所知,这项任务 即使在这种情况下,计算结果仍然(反)序列化到硬盘 因此,问题是我要保持多少性能增益 在图中独立计算的单一路径上尽可能少的任务: A) 每条路径上都有许多小的“地图”任务 t --> t --> t -->... so

我们有一个dask计算图(非常定制,所以我们使用dask延迟而不是集合)。我在文档中读到,当前的调度策略是后进先出(LIFO),因此工作进程有很大的机会获得它刚刚计算的数据,以便在图表中进行下一步操作。但据我所知,这项任务 即使在这种情况下,计算结果仍然(反)序列化到硬盘

因此,问题是我要保持多少性能增益 在图中独立计算的单一路径上尽可能少的任务:

A) 每条路径上都有许多小的“地图”任务

t --> t --> t -->...
                     some reduce stage
t --> t --> t -->...
   T ->
        some reduce stage
   T -> 
B) 每条路径都有一个巨大的“地图”任务

t --> t --> t -->...
                     some reduce stage
t --> t --> t -->...
   T ->
        some reduce stage
   T -> 

谢谢大家!

dask多处理调度程序将自动将线性任务链融合到单个任务中,因此上述案例A将自动成为案例B

如果您的工作负载更复杂,并且确实需要节点间通信,那么您可能希望在一台计算机上尝试分布式调度程序。它更智能地管理工作人员之间的数据移动

$ pip install dask distributed

>>> from dask.distributed import Client
>>> c = Client()  # Starts local "cluster".  Becomes the global scheduler
进一步阅读

校正
另外,需要注意的是,Dask不会将中间结果持久化到磁盘上。相反,它在流程之间直接传递中间结果。

谢谢!这很有趣,因为我们有一个不可变量化的对象(lasio.LasFile-cloudpickle由于某种原因无法处理它),作为一个唯一的中间结果,它只存在于计算图中的单个路径上。dask从一开始就失败了,但在取消勾选时出现异常。如果对象在dask图中,而不是作为中间输出,那么应该预料到该错误。当你说“从一开始就正确”时,这是否意味着对象出现在你要求dask计算的计算中?不,它的实例是由图中任务的第一行生成的