Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/powerbi/2.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
DASK-在执行过程中停止工作会导致两次启动已完成的任务_Dask - Fatal编程技术网

DASK-在执行过程中停止工作会导致两次启动已完成的任务

DASK-在执行过程中停止工作会导致两次启动已完成的任务,dask,Dask,我想使用dask处理大约5000个批处理任务,这些任务将结果存储在关系数据库中,在它们全部完成后,我想运行一个最终任务,该任务将查询数据库并生成一个结果文件(将存储在AWS S3中) 所以大致是这样的: 从dask进口袋,延迟 批次=行李。从\u序列(我的\u批次()) 结果=batches.map(处理\u批处理\u和存储\u结果\u在\u数据库中) 图形=延迟(读取\u数据库\u和\u存储\u结果\u捆绑到\u s3中)(结果) client=client(_调度程序:8786') cli

我想使用dask处理大约5000个批处理任务,这些任务将结果存储在关系数据库中,在它们全部完成后,我想运行一个最终任务,该任务将查询数据库并生成一个结果文件(将存储在AWS S3中)

所以大致是这样的:


从dask进口袋,延迟
批次=行李。从\u序列(我的\u批次())
结果=batches.map(处理\u批处理\u和存储\u结果\u在\u数据库中)
图形=延迟(读取\u数据库\u和\u存储\u结果\u捆绑到\u s3中)(结果)
client=client(_调度程序:8786')
client.compute(图形)

这是可行的,但是:在处理快结束时,许多工作人员处于空闲状态,我希望能够关闭它们(并在AWS EC2上节省一些钱),但是如果我这样做,调度程序将“忘记”这些任务已经完成,并尝试在剩余的工作人员上再次运行它们


我知道这实际上是一个功能,而不是一个bug,因为Dask试图在启动
读取\u数据库\u和\u存储\u捆绑\u结果\u到\u s3之前跟踪所有结果,但是:有什么方法可以让dask只编排分布式处理图,而不必担心状态管理吗?

我建议您在完成后就忘记未来。此解决方案使用dask.distributed concurrent.futures接口,而不是dask.bag。特别是它使用迭代器

from dask.distributed import Client, as_completed
client = Client('the_scheduler:8786')

futures = client.map(process_batch_and_store_results_in_database, my_batches())

seq = as_completed(futures)
del futures # now only reference to the futures is within seq

for future in seq:
    pass  # let future be garbage collected

这个问题似乎与此有关:也与此有关: