我不了解dask分布式中的弹性模型。
工人提出的异常情况使令人尴尬的并行dask操作失败。如果任何工人遇到异常,所有工人和客户都会死亡。
在这里阅读:http://distributed.dask.org/en/latest/resilience.html#user-code-failures 建议应将异常包含在工作人员中,并且后续任务将继续进行而不会中断。
“当函数引发错误时,该错误将保留并应要求传输给客户端。任何试图收集该结果或任何相关结果的尝试都会引发该异常...这不会影响调度程序或工人。”
我在这里遵循令人尴尬的并行用例: http://docs.dask.org/en/latest/use-cases.html
import numpy as np
np.random.seed(0)
from dask import compute, delayed
from dask.distributed import Client, LocalCluster
def raise_exception(x):
if x == 10:
raise ValueError("I'm an error on a worker")
elif x == 20:
print("I've made it to 20")
else:
return(x)
if __name__=="__main__":
#Create cluster
cluster = LocalCluster(n_workers=2,threads_per_worker=1)
client = Client(cluster)
values = [delayed(raise_exception)(x) for x in range(0,100)]
results=compute(*values,scheduler='distributed')
任务20从未完成。任务10上的异常导致调度程序和工作程序死亡。我对编程模型不了解什么?为什么将此视为聚会?我只想运行每个任务并捕获任何异常以供以后检查,而不是在客户端上引发它们。
大学SLURM集群上的并行图像处理。我的函数有一个副作用,将处理后的图像保存到文件中。进程是独立的,调度程序从不收集。该异常会导致所有节点在群集上死亡。
交叉列出问题,因为我不确定这是错误还是功能!
答案 0 :(得分:0)
在回购中得到了解答-延迟的延迟会计算全部或全部。从并发期货界面中使用快捷地图+等待。这是设计好的,不是错误。