在动态创建字形时,如何设置重启频率?在当前设置中,工作人员不断重新启动无穷大.
我也尝试过设置: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)
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