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