我遇到了一个问题,我的分布式群集似乎“挂起” - 例如任务停止处理,因此积累了未处理的任务积累,所以我正在寻找一些方法来帮助调试正在进行的工作。
在Client
上有processing
方法,它会告诉我当前在每个工作人员上运行的任务,但是AFAICS是关于Client
对象上可用任务的唯一信息吗? / p>
我想要的是不仅可以查询处理任务,还可以查询包括已处理,处理和错误在内的所有任务,并且可以为每项任务获取一些统计信息,例如submitted_time
和{ {1}}这将允许我找出阻止群集的任务。
很高兴能够获得任何给予任务的completion_time
。这在调试失败的任务时尤其有用。
目前是否有任何此功能可用,或者有任何方法可以获取我之后的信息吗?
非常欢迎任何有关如何调试问题的其他建议。
答案 0 :(得分:2)
截至2017年5月,没有明确的“给我关于任务的所有信息”操作。但是,您可以使用客户端直接调查任务状态。这将要求您深入了解调度程序和工作程序跟踪的信息。请参阅以下文档页面:
要查询此状态,我会使用Client.run_on_scheduler和Client.run方法。这些功能可以在调度程序或工作人员身上运行。如果此函数包含dask_scheduler
或dask_worker
参数,则该函数将被赋予调度程序或工作程序对象本身。
def f(dask_scheduler):
return dask_scheduler.task_state
client.run_on_scheduler(f)
您现在可以访问以检查调度程序或工作人员所了解的任何状态,并运行任何内部诊断检查。您选择调查的内容完全取决于您的使用案例。
def f(keys, dask_scheduler=None):
return dask_scheduler.transition_story(*keys)
client.run_on_scheduler(f, [key1, key2, key3])