重启频率为:simple_one_for_one worker

fk2*_*low 3 elixir erlang-otp

在动态创建字形时,如何设置重启频率?在当前设置中,工作人员不断重新启动无穷大.

我也尝试过设置:max_restarts,在工作规范(worker(Kombiner.Foo,[],max_restarts:3,max_seconds:5)中)并且它似乎根本没有做任何事情(它将继续为无限重启).

def start_child(input) do
  Supervisor.start_child(@name, [input])
end


def init(:ok) do
  children = [
    worker(Kombiner.Foo, [], restart: :transient)
  ]
  supervise(children, strategy: :simple_one_for_one)
end
Run Code Online (Sandbox Code Playgroud)

在Kombiner.Foo工作者里面:

def handle_info({any, :timeout}, _state) do
  {:stop, :timeout, nil}
end
Run Code Online (Sandbox Code Playgroud)

Str*_*s3D 5

max_restarts: 3, max_seconds: 5需要添加到最后的supervise/2调用init/1,而不是在worker/3子列表中调用的函数.您的代码应如下所示:

def init(:ok) do
  children = [
    worker(Kombiner.Foo, [], restart: :transient)
  ]
  supervise(children, strategy: :simple_one_for_one, max_restarts: 3, max_seconds: 5)
end
Run Code Online (Sandbox Code Playgroud)

重新启动策略,max restarts和max seconds适用于列表中的所有子项.

文档:http://elixir-lang.org/docs/stable/elixir/Supervisor.Spec.html#supervise/2