2017-05-17 12 views
1

分散クラスタが「ハングアップ」しているように見えます。タスクは処理を停止し、未処理のタスクのバックログが蓄積されるため、何が起こっているのかをデバッグするのに役立つ方法を探しています。特定のDaskタスクに関する情報を取得する方法

ClientにはClientオブジェクトで利用可能なタスクに関する唯一の情報であるAFAICSではなく、各ワーカーで現在実行中のタスクを教えてくれるprocessingメソッドがありますか?

私が望むのは、処理タスクだけでなく、処理され、処理され、エラーが発生し、各タスクについて、submitted_timecompletion_timeなどの統計情報を取得できるようにすることですどのタスクがクラスタをブロックしているかを知ることができます。

これは、任意のは、あまりにも仕事を与えるためargs/kwargsを得ることができるようにすることですipyparallel.AsyncResult

あると便利で拡張メタデータと同様です。これは、失敗したタスクのデバッグに特に役立ちます。

この機能は現在利用可能ですか、それとも後で情報を入手する方法がありますか?

問題をデバッグする方法に関するその他の提案は、大歓迎です。

答えて

2

2011年5月現在、明示的に「タスクに関するすべての情報を与えてください」という操作は存在しません。ただし、クライアントを使用してタスクの状態を直接調べることができます。これには、スケジューラと作業者が追跡する情報にちょっとした潜水が必要です。私はClient.run_on_schedulerClient.runメソッドを使用することになり、この状態を照会するには

:以下のドキュメントページを参照してください。これらは、スケジューラまたは従業員をrespsectively上で実行する機能をとる。この関数に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]) 
+0

それがあるべきように見える: def f(keys, dask_scheduler): return dask_scheduler.transition_story(*keys)

+0

おかげで@DaveHirschfeld。一定 – MRocklin