Elixir語言中 Supervisor.Spec
相關用法介紹如下。
用於構建子規範的過時函數。
此模塊中的函數已棄用,它們不適用於 Elixir v1.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
會自動這樣做。定義一個基於模塊的監督器可能很有用,例如,在
回調中執行初始化任務。Supervisor.init/1
主管和工人選項
在上麵的示例中,我們為工人和主管定義了規範。這些規範(適用於工人和主管)接受以下選項:
-
:id
- 主管內部用於標識子規範的名稱;默認為子工作者/主管的給定模塊名稱 -
:function
- 在子節點上調用以啟動它的函數 -
:restart
- 一個原子,定義何時應該重新啟動終止的子進程(請參閱下麵的 "Restart values" 部分) -
:shutdown
- 定義如何終止子進程的原子(請參閱下麵的 "Shutdown values" 部分) -
:modules
- 它應該是一個包含一個元素的列表[module]
,其中 module 是回調模塊的名稱,僅當子進程是Supervisor
GenServer
GenEvent
:modules
應該是:dynamic
重啟值 (:restart)
:restart
選項支持以下重啟值:
-
:permanent
- 子進程總是重啟 -
:temporary
- 子進程永遠不會重新啟動(即使主管的策略是:rest_for_one
或:one_for_all
) -
:transient
- 僅當子進程異常終止時才會重新啟動,即,退出原因不是:normal
、:shutdown
或{:shutdown, term}
請注意,達到最大重啟強度的主管將退出 :shutdown
原因。在這種情況下,監督者隻會在其子規範定義為 :restart
選項設置為 :permanent
(默認值)時重新啟動。
關機值 (:shutdown
)
:shutdown
選項支持以下關閉值:
-
:brutal_kill
- 使用Process.exit(child, :kill)
無條件終止子進程 -
:infinity
- 如果子進程是主管,這是一種給予子樹足夠時間關閉的機製;它也可以與小心的工人一起使用 -
一個非負整數 - 主管通過調用
Process.exit(child, :shutdown)
告訴子進程終止然後等待退出信號返回的時間量(以毫秒為單位)。如果在指定時間內沒有收到退出信號,則使用Process.exit(child, :kill)
無條件終止子進程
相關用法
- Elixir Supervisor.Spec.worker用法及代碼示例
- Elixir Supervisor.Spec.supervise用法及代碼示例
- Elixir Supervisor.Spec.supervisor用法及代碼示例
- Elixir Supervisor.child_spec用法及代碼示例
- Elixir Supervisor.init用法及代碼示例
- Elixir Supervisor用法及代碼示例
- Elixir StringIO.flush用法及代碼示例
- Elixir Stream用法及代碼示例
- Elixir String.contains?用法及代碼示例
- Elixir String.reverse用法及代碼示例
- Elixir Stream.drop_while用法及代碼示例
- Elixir String.to_integer用法及代碼示例
- Elixir System.stop用法及代碼示例
- Elixir Stream.map_every用法及代碼示例
- Elixir Stream.iterate用法及代碼示例
- Elixir String.pad_trailing用法及代碼示例
- Elixir Stream.dedup_by用法及代碼示例
- Elixir Stream.interval用法及代碼示例
- Elixir String.split_at用法及代碼示例
- Elixir String.valid?用法及代碼示例
- Elixir String.replace_prefix用法及代碼示例
- Elixir String.printable?用法及代碼示例
- Elixir Stream.zip用法及代碼示例
- Elixir System.fetch_env!用法及代碼示例
- Elixir String.replace_trailing用法及代碼示例
注:本文由純淨天空篩選整理自elixir-lang.org大神的英文原創作品 Supervisor.Spec。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。