首页 > 解决方案 > 如何在所有任务都提交之前阻止任务的执行?

问题描述

我正在构建一个框架,其中每个任务都使用提交提交给用户提供的 dask 客户端,如下所示:

future = client.submit(my_func,*args)

一些函数对以前的 future 有多个依赖关系,最深的深度约为 10-15 个任务深度。所有这些功能都使用该功能提交给客户端submit

但是,我发现对于大量任务,比如几千个以上,这种方法往往会挂起调度程序,因为计算和任务提交是同时发生的。有没有办法以延迟的方式向客户“提交”某些东西,以便我可以告诉客户只有在提交每个任务后才执行?

标签: python-3.xdaskdask-distributed

解决方案


您可以使用 dask.delayed 接口,该接口与 基本相同client.submit,但比较懒惰。

https://docs.dask.org/en/latest/delayed.html

然而,提交几千个任务对调度器来说不应该有那么大的负担。如果您的任务不包含大量元数据,那么我预计开销约为一秒钟。

https://docs.dask.org/en/latest/delayed-best-practices.html#avoid-repeatedly-putting-large-inputs-into-delayed-calls


推荐阅读