如何对每个worker上延迟的dask进行排队,以允许进程的顺序执行?

如何对每个worker上延迟的dask进行排队,以允许进程的顺序执行?,dask,dask-distributed,dask-delayed,Dask,Dask Distributed,Dask Delayed,我需要工人一次处理一个任务,并在开始新的任务之前完成当前的任务。我无法做到:(1)每个工作人员在任何时候最多运行一个任务,(2)让工作人员在开始新的过程之前完成一个过程;原子事务 我在一个有40个节点的集群上使用dask.distributedclient;每个4芯和15GB ram。pipeline I进程的任务约为8-10GB,因此在一个工作上有两个任务将导致应用程序失败 我尝试使用dask worker scheduler ip:port--nprocs 1--resources proc

我需要工人一次处理一个任务,并在开始新的任务之前完成当前的任务。我无法做到:(1)每个工作人员在任何时候最多运行一个任务,(2)让工作人员在开始新的过程之前完成一个过程;原子事务

我在一个有40个节点的集群上使用dask.distributedclient;每个4芯和15GB ram。pipeline I进程的任务约为8-10GB,因此在一个工作上有两个任务将导致应用程序失败

我尝试使用
dask worker scheduler ip:port--nprocs 1--resources process=1
futures=[client.submit(func,f,resources={process':1})为futures中的f分配worker资源和任务分配]
,但没有成功

我的代码如下:

导入dask
从dask.distributed导入客户端
@达斯克
def load():
...
@达斯克
def foo():
...
@达斯克
def save():
...
客户端=客户端(调度程序ip:端口)
#从给定路径处理文件
路径=['list','of','path']
结果=[]
对于路径中的路径:
img=负载(路径)
对于范围内的u(n):
img=foo(img)
results.append(保存(输出文件名))
客户。分散(结果)
futures=client.compute(结果)
def标识(x):
返回x
客户(期货)
futures=[client.submit(相同,f,resources={'process':1})用于futures中的f]
客户收集(期货)
截至目前,我有两个案例:

1-我运行所有输入,应用程序以
MemoryError

2-我运行子样本,但其运行方式如下:

加载(img-1)->加载(img-2)->foo(img-1)->加载(img-3)->…->保存(img-1)->保存(img-2)->

TLDR:这就是我想对每个员工执行的操作:


load(img-1)->foo(img-1)->save(img-1)->load(img-7)->……

这里最简单的事情可能是只使用一个线程启动工作人员

dask-worker ... --nthreads 1

那么这个工作人员一次只能启动一件事情

这里最简单的事情可能是只启动一个线程

dask-worker ... --nthreads 1
那么这个工人一次只能开始一件事