Supervisor.Spec
Supervisor.Spec
注意:这个模块中的函数是不推荐的,它们不适用于Elixirv1.5中引入的基于模块的子规范。请看Supervisor
而不是文件。
用于定义主管规范的方便功能。
例
通过使用本模块中的函数,可以指定将在主管下使用的子级,从Supervisor.start_link/2
*
import Supervisor.Spec
children = [
worker(MyWorker, [arg1, arg2, arg3]),
supervisor(MySupervisor, [arg1])
]
Supervisor.start_link(children, strategy: :one_for_one)
有时,定义由模块支持的主管可能会很方便:
defmodule MySupervisor do
use Supervisor
def start_link(arg) do
Supervisor.start_link(__MODULE__, arg)
end
def init(arg) do
children = [
worker(MyWorker, [arg], restart: :temporary)
]
supervise(children, strategy: :simple_one_for_one)
end
end
注意,在本例中,我们不必显式导入Supervisor.Spec
如use Supervisor
自动这么做。例如,定义基于模块的监控器对于在c:init/1
回调。
主管和工人选择
在上面的例子中,我们为工人和主管定义了规格。这些规格(既适用于工作人员也适用于主管)接受以下选项:
:id
-主管用于在内部标识子规范的名称;默认为子工作人员/主管的给定模块名称
:function
-对子类启动该功能的调用
:restart
- 定义何时应该重新启动终止的子进程的原子(请参见下面的“重新启动值”部分)
:shutdown
- 定义应如何终止子进程的原子(请参见下面的“关闭值”部分)
:modules
- 它应该是一个包含一个元素的列表[module]
,其中module是仅当子进程是aSupervisor
或时回调模块的名称GenServer
; 如果子进程是aGenEvent
,:modules
则应:dynamic
重新启动值(:restart)该:restart
选项支持以下重新启动值:
:permanent
-始终重新启动子进程
:temporary
- 子进程永远不会重新启动(即使主管的策略是:rest_for_one
或不:one_for_all
)
:transient
- 子进程只有在异常终止时才会重新启动,也就是说,退出的原因不是:normal
,:shutdown
或者是{:shutdown, term}
注意到达到最大重启强度的主管将:shutdown
有理由退出。在这种情况下,只有在其:restart
选项被设置为:permanent
(默认)的情况下定义其子规格时,管理程序才会重新启动。
Shutdown values (:shutdown)
控件中支持下列关闭值:shutdown
备选方案:
:brutal_kill
-使用Process.exit(child, :kill)
:infinity
-如果子进程是主管,这是一种机制,可以给子树足够的时间来关闭;它也可以与工人一起使用。
- 任何整数-值为
:shutdown
也可以是任意整数,这意味着监控程序通过调用Process.exit(child, :shutdown)
然后等待出口信号回来。如果在指定的时间%28(此选项的值)内没有接收到退出信号(毫秒%29),则将使用以下方法无条件终止子进程Process.exit(child, :kill)
摘要类型儿童[医]ID%28%29支持的id值模块%28%29支持的模块值重启%28%29支持的重新启动值停工%28%29支持关闭值规格%28%29监事规范战略%28%29支助战略工人%28%29支持的工人价值观功能监督%28名儿童,选项%29接收子女列表%28名员工或主管%29进行监督和一组选项监控程序%28模块、ARGS、选项[医][]%29定义给定的module
作为一个主管,它将以给定的参数开始。工作人员%28模块、ARGS、选项[医][]%29定义给定的module
作为一个将以给定参数开始的工作人员类型儿童[医]ID%28%29child_id() :: term支持的id值模块%28%29module
s() :: :dynamic | [module
]支持的模块值重启%28%29restart() :: :permanent | :transient | :temporary支持的重新启动值停工%28%29shutdown() :: timeout | :brutal_kill支持关闭值规格%28%29spec() :: {child_id, start_fun :: {module
, atom, [term]}, restart, shutdown, worker,module
s}监事规范战略%28%29strategy :: :simple_one_for_one | :one_for_one | :one_for_all | :rest_for_one支助战略工人%28%29worker() :: :worker | :supervisor支持的工人价值观功能监督%28名儿童,选项%29supervise([spec], [strategy: strategy, max_restarts: non_neg_integer, max_seconds: pos_integer]) :: {:ok, tuple}接收子女列表%28名员工或主管%29进行监督和一组选项。返回包含主管规范的元组。此元组可用作c:init/1
实现基于模块的监控器时的回调。实例supervise(children, strategy: :one_for_one)备选方案
:strategy
-重新启动策略选项。它可以是:one_for_one
,,,:rest_for_one
,,,:one_for_all
,或:simple_one_for_one
.您可以在Supervisor
模块文档。
:max_restarts
-在一个时间框架内允许的最大重新启动量。默认为3
...
:max_seconds
-时限:max_restarts
适用。默认为5
...
大:strategy
选项是必需的,默认情况下,最多允许在5秒内重新启动3次。检查Supervisor
模块,详细说明可用的战略。
supervisor(module, args, options \ [])
supervisor(module, [term], [restart: restart, shutdown: shutdown, id: term, function: atom, modules: modules]) :: spec
定义给定的module
作为一名监督者,将以给定的论点开始。
supervisor(ExUnit.Runner, [], restart: :permanent)
默认情况下,函数start_link
在给定模块上调用。总的来说,这些选项的默认值是:
[id: module,
function: :start_link,
restart: :permanent,
shutdown: :infinity,
modules: [module]]
检查文档中的Supervisor.Spec
有关选项的更多信息。
worker(module, args, options \ [])
worker(module, [term], [restart: restart, shutdown: shutdown, id: term, function: atom, modules: modules]) :: spec
定义给定的module
作为一个工人,它将以给定的参数开始。
worker(ExUnit.Runner, [], restart: :permanent)
默认情况下,函数start_link
在给定模块上调用。总的来说,这些选项的默认值是:
[id: module,
function: :start_link,
restart: :permanent,
shutdown: 5000,
modules: [module]]
检查文档中的Supervisor.Spec
有关选项的更多信息。