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

How to find why a task fails in dask distributed?

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

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

更新 我所说的失败是指增加调度程序提供的 Bokeh web UI 中失败任务的计数器。已完成任务的计数器也增加了。

函数即运行由Executor.mapreturnsNone。它与数据库通信,从其 table 中检索一些行,执行计算并更新值。

我在map中有40000多个任务,所以研究日志有点乏味。

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

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在调度器或工作器中直接检查它们