如何在分配的dask中找到任务失败的原因?

时间:2016-09-22 19:04:26

标签: python distributed dask

我正在使用dask.distributed开发分布式计算系统。我使用Executor.map函数提交给它的任务有时会失败,而其他任何看似相同的任务会成功运行。

框架是否提供了诊断问题的方法?

更新 失败的意思是指在调度程序提供的Bokeh Web UI中增加失败任务的计数器。完成任务的计数器也会增加。

Executor.map运行的函数返回None。它与数据库通信,从其表中检索某些行,执行计算和更新值。

我在地图上有超过40000个任务,因此研究日志有点乏味。

1 个答案:

答案 0 :(得分:2)

如果任务失败,那么任何检索结果的尝试都会引发与工作人员相同的错误

In [1]: from distributed import Client

In [2]: c = Client()

In [3]: def div(x, y):
   ...:     return x / y
   ...: 

In [4]: future = c.submit(div, 1, 0)

In [5]: future.result()
<ipython-input-3-398a43a7781e> in div()
      1 def div(x, y):
----> 2     return x / y

ZeroDivisionError: division by zero

然而,其他事情可能会出错。例如,您的工作人员可能没有与客户端上相同的软件,或者您的网络可能不允许连接通过,或者实际网络中发生的任何其他事情。为了帮助诊断这些,有几个选择:

  1. 您可以使用web interface跟踪任务和工作人员的进度
  2. 您可以在调度程序中start IPython kernels或工作人员直接检查它们