[英]How to get information about a particular Dask task
我遇到了一个问题,我的分布式集群似乎“挂起” - 例如任务停止处理,因此积累了未处理的任务,所以我正在寻找一些方法来帮助调试正在发生的事情。
在Client
有processing
方法,它会告诉我当前在每个工作程序上运行的任务,但是AFAICS是关于Client
对象上可用任务的唯一信息吗?
我想要的是能够不仅查询处理任务,而且查询所有任务,包括已处理,处理和错误,并且每个任务都能够获得一些统计信息,例如submitted_time
和completion_time
,这些都可以让我找到哪些任务阻塞了群集。
这与ipyparallel.AsyncResult
上的扩展元数据类似
一个很好的方法是能够获得任何给定任务的args/kwargs
。 这在调试失败的任务时尤其有用。
目前是否有任何此功能可用,或者有任何方法可以获取我之后的信息吗?
关于如何调试问题的任何其他建议都将受到欢迎。
截至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])
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.