如何在提交所有任务之前阻止任务的执行?

How to block execution of tasks till all tasks have been submitted?

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

future = client.submit(my_func,*args)

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

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

您可以使用 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