2017-03-07 3 views
4

Juliaはフォールトトレランスをどのように公開しますか - ノードがダウンしたとき(意図的にまたは間違っているとき)およびノー​​ド間の通信がダウンしたとき。分散型Juliaの弾性並列性とフォールトトレランス

私はそのような特徴のfew mentionsを見ましたが、正確にそれができる方法を見つけることができませんでした。

答えて

3

pmapドキュメントストリングでは、これがすでにretry_キーワード引数を使用して実装されていることがわかります。

pmap([::AbstractWorkerPool], f, c...; distributed=true, batch_size=1, 
on_error=nothing, retry_n=0, retry_max_delay=DEFAULT_RETRY_MAX_DELAY, 
retry_on=DEFAULT_RETRY_ON) -> collection 

...すべてのエラーは コレクションの残りの部分を処理してからのpmapを停止します。この動作をオーバーライドするには、引数 を引数on_error経由で処理することを指定できます。この関数は、単一の 引数をとります。例外です。この関数は、 エラーを再実行して処理を停止するか、または続行するために、 の結果をインラインで呼び出し元に返す値を返します。

失敗計算は も引数がretry_onとして再試行するように通過さretry_on、retry_n、retry_max_delayを介して再試行され、nはそれぞれ をMAX_DELAYことができます。バッチ処理が指定され、バッチ全体が失敗すると、バッチ内のすべての アイテムが再試行されます。

@parallelマクロにはこのようなことはありません。しかし、Base.wrap_on_error & Base.wrap_retry関数を使用して、元の関数を拡張してエラーを処理することができます。実装の詳細の多くは、pmapの定義をhttps://github.com/JuliaLang/julia/blob/v0.5.0/base/pmap.jlに見ると分かります。

基本的な戦略は、エラー(および潜在的にデータ)をキャッチして、同じワーカーを使用して再試行するか、同じワーカーを使用して再試行することです。おもう。

+0

役に立つポインタをありがとう! – crackjack