0
にスーパーバイザーとの流れを監視します。それを行う最も簡単な方法は何ですか?は、私はこのようなストリームを使用してデータをポーリングするExTwitter-ライブラリを使用エリクシール
にスーパーバイザーとの流れを監視します。それを行う最も簡単な方法は何ですか?は、私はこのようなストリームを使用してデータをポーリングするExTwitter-ライブラリを使用エリクシール
最も簡単な方法は、新しいモジュール内の関数でこのコードを置くだけでspawn_link
を通じて、この関数を呼び出しますstart_link
機能を追加し、あなたのSupervisor
からworker
としてそのモジュールを追加することです。私が入力されましたが、Streamer
が起動するたびに、すべてのPID値を印刷している間出力が起こっていたように、これは、従うことは少し難しいかもしれません
#PID<0.85.0>
iex(1)> 1
2
3
1
2
3
1
2
Process.exit3pid(0, 85, 0), :kill)
#PID<0.88.0>
1
true
iex(2)> 2
3
1
2
3
1
2
3
Process.exit(pid(0, 88, 0), :kill)
#PID<0.90.0>
true
1
iex(3)> 2
3
1
2
3
:
defmodule M do
use Application
def start(_type, _args) do
import Supervisor.Spec, warn: false
children = [
worker(M.Streamer, []),
]
opts = [strategy: :one_for_one, name: M.Supervisor]
Supervisor.start_link(children, opts)
end
end
defmodule M.Streamer do
def start_link do
{:ok, spawn_link(__MODULE__, :main, [])}
end
def main do
IO.inspect(self)
for i <- Stream.cycle([1, 2, 3]) do
IO.puts i
:timer.sleep(1000)
end
end
end
デモ:ここでは簡単な例ですProcess.exit
行は私が入力したコードであり、true
はそれらの呼び出しの戻り値です。ご覧のとおり、私がM.Streamer
プロセスを終了するたびに、スーパーバイザによってプロセスが再開されました。