1

Erlang を学んでいて、スーパーバイザーに質問があります...

3 つのパラメーター (文字列、文字列、数値) を必要とする関数があります。それを監視し、失敗した場合は、渡した 3 つのパラメーターで再起動されるようにします。

これはスーパーバイザーが処理できるものですか、それとも他の概念を検討する必要がありますか?

ありがとう。

2016 年 1 月 23 日更新

1 つ言いたいことがあります... 1439 のエントリのリストがあります。そのリストのエントリごとにスーパーバイザーを作成する必要があります。各エントリには、異なる引数が発生します。たとえば、ここにいくつかの疑似コードがあります (Ruby を連想させます)。

(360..1799).each do |index|
  export(output_path, table_name, index) # Supervise this
end

これは、実行時のユーザー インタラクションによってトリガーされます。output_pathtable_nameも動的ですが、特定のバッチでは変更されません。解きほぐすと、実行は次のようになります。

export("/出力/2016-01-23/", "temp1234", 360)
export("/出力/2016-01-23/", "temp1234", 361)
export("/出力/2016-01-23/", "temp1234", 362)
.
.

したがって、361 が失敗した場合は"/output/2016-01-23/"、 、temp1234、およびで再起動する必要があり361ます。

これはスーパーバイザーと一緒にできることですか?

4

2 に答える 2

1

はい、これがsupervisor機能しますが、「パラメーター」ではなく「引数」を意味します。

通常の (simple_one_for_one ではない) スーパーバイザーの場合、init/1 実装は、いわゆる子仕様のリストを返します。それぞれの仕様は、生成される子を指定し、渡される引数は、この子仕様の一部として提供されます。

simple_one_for_one スーパーバイザーでは、子の仕様を提供する必要がありますが、監視対象の各子を開始するときに引数を提供します。

すべての場合において、監視対象の子は同じ引数で再起動されます。

于 2016-01-23T10:16:53.500 に答える
0

一般的な概念

  • Erlang システムはモジュールに分割されています。
  • 各モジュールは関数で構成されています。
  • 仕事はプロセスによって行われ、関数を使用してそれを行います。
  • スーパーバイザーは、他のプロセスを監督するプロセスです。

したがって、関数はプロセス内で確実に実行され、スーパーバイザーによってそのプロセスを指定および監視できます。このようにして、関数が失敗してクラッシュすると、それを実行しているプロセスもクラッシュします。プロセスがクラッシュすると、そのスーパーバイザーがそれを発見し、定義済みの再起動戦略に基づいて対処できます。これらの戦略はone_for_oneone_for_allおよびrest_for_oneです。

その他のオプションについては、そのマニュアルを確認してください。

于 2016-01-23T08:41:41.343 に答える