如何找到任务在 dask 分布式中失败的原因?
How to find why a task fails in dask distributed?
我正在使用 dask.distributed
开发分布式计算系统。我使用 Executor.map
函数提交给它的任务有时会失败,而其他看似相同的任务 运行 会成功。
框架是否提供任何诊断问题的方法?
更新
我所说的失败是指增加调度程序提供的 Bokeh web UI 中失败任务的计数器。已完成任务的计数器也增加了。
函数即运行由Executor.map
returnsNone
。它与数据库通信,从其 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
但是,其他事情也可能出错。例如,您的工作人员上可能没有与客户端上相同的软件,或者您的网络可能不允许连接通过,或者现实世界网络中发生的任何其他事情。为了帮助诊断这些,有几个选项:
- 您可以使用 web interface 来跟踪您的任务和工作人员的进度
- 您可以start IPython kernels在调度器或工作器中直接检查它们
我正在使用 dask.distributed
开发分布式计算系统。我使用 Executor.map
函数提交给它的任务有时会失败,而其他看似相同的任务 运行 会成功。
框架是否提供任何诊断问题的方法?
更新 我所说的失败是指增加调度程序提供的 Bokeh web UI 中失败任务的计数器。已完成任务的计数器也增加了。
函数即运行由Executor.map
returnsNone
。它与数据库通信,从其 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
但是,其他事情也可能出错。例如,您的工作人员上可能没有与客户端上相同的软件,或者您的网络可能不允许连接通过,或者现实世界网络中发生的任何其他事情。为了帮助诊断这些,有几个选项:
- 您可以使用 web interface 来跟踪您的任务和工作人员的进度
- 您可以start IPython kernels在调度器或工作器中直接检查它们