如何获取有关特定 Dask 任务的信息

Dav*_*eld 3 python distributed dask

我遇到了一个问题,我的分布式集群似乎“挂起” - 例如,任务停止处理,因此积压了未处理的任务,因此我正在寻找某种方法来帮助调试正在发生的事情。

Client一个processing方法可以告诉我每个工作人员当前正在运行哪些任务,但 AFAICS 这是有关对象上可用任务的唯一信息吗Client

我想要的是不仅能够查询处理任务,还能够查询所有任务,包括已处理、正在处理和出错的任务,并且每个任务都能够获取一些统计信息,例如submitted_time和 ,completion_time这将使我能够找出哪些任务正在阻塞集群。

这类似于ipyparallel.AsyncResult

一个很好的事情是能够获得args/kwargs任何给定的任务。这对于调试失败的任务特别有帮助。

目前是否有任何此功能可用,或者有什么方法可以获取我想要的信息?

关于如何调试问题的任何其他建议都将受到极大欢迎。

MRo*_*lin 5

截至 2017 年 5 月,不存在明确的“提供有关任务的所有信息”操作。但是,您可以使用客户端直接调查任务状态。这将需要您深入了解调度程序和工作人员跟踪的信息。请参阅以下文档页面:

要查询此状态,我将使用Client.run_on_schedulerClient.run方法。它们分别需要一个函数在调度程序或工作线程上运行。如果此函数包含dask_schedulerdask_worker参数,则该函数将被赋予调度程序或工作对象本身。

def f(dask_scheduler):
    return dask_scheduler.task_state

client.run_on_scheduler(f)
Run Code Online (Sandbox Code Playgroud)

您现在可以检查调度程序或工作人员了解的任何状态并运行任何内部诊断检查。不过,您选择调查的内容完全取决于您的用例。

def f(keys, dask_scheduler=None):
    return dask_scheduler.transition_story(*keys)

client.run_on_scheduler(f, [key1, key2, key3])
Run Code Online (Sandbox Code Playgroud)