Spec-Zone.ru › Elixir 1.13

Supervisor.Spec

Этот модуль устарел. Используйте новые спецификации дочерних процессов, описанные в модуле Supervisor вместо него.

Устаревшие функции для создания спецификаций дочерних процессов.

Функции в этом модуле устарели и не работают с основанными на модуле спецификациями дочерних процессов, представленными в Elixir v1.5. Пожалуйста, обратитесь к документации Supervisor вместо этого.

Функции для удобства определения спецификаций Supervisor.

Пример

Используя функции в этом модуле, можно указать дочерние процессы, которые будут использоваться под 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)

Иногда может быть полезно определить Supervisor, основанный на модуле:

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, основанного на модуле, может быть полезно, например, для выполнения задач инициализации в обратном вызове Supervisor.init/1.

Параметры Supervisor и worker

В примере выше мы определили спецификации для worker и Supervisor. Эти спецификации (как для worker, так и для Supervisor) принимают следующие параметры:

  • :id — имя, используемое для идентификации спецификации дочернего процесса внутри Supervisor; по умолчанию совпадает с именем модуля дочернего worker/Supervisor

  • :function — функция для вызова в дочернем процессе для его запуска

  • :restart — атом, определяющий, когда завершенный дочерний процесс должен быть перезапущен (см. раздел «Значения перезапуска» ниже)

  • :shutdown — атом, определяющий, как должен быть завершен дочерний процесс (см. раздел «Значения завершения» ниже)

  • :modules — это должен быть список с одним элементом [module], где module — имя модуля обратного вызова только в том случае, если дочерний процесс является Supervisor или GenServer; если дочерний процесс является GenEvent, :modules должен быть :dynamic

Значения перезапуска (:restart)

В параметре :restart поддерживаются следующие значения перезапуска:

  • :permanent — дочерний процесс всегда перезапускается

  • :temporary — дочерний процесс никогда не перезапускается (даже если стратегия Supervisor — :rest_for_one или :one_for_all)

  • :transient — дочерний процесс перезапускается только если он завершается аномально, то есть с причиной завершения, отличной от :normal, :shutdown или {:shutdown, term}

Обратите внимание, что Supervisor, достигший максимальной интенсивности перезапуска, завершится с причиной :shutdown. В этом случае Supervisor будет перезапущен только если его спецификация дочернего процесса была определена с параметром :restart, установленным в :permanent (по умолчанию).

Значения завершения (:shutdown)

В параметре :shutdown поддерживаются следующие значения завершения:

  • :brutal_kill — дочерний процесс безусловно завершается с помощью Process.exit(child, :kill)

  • :infinity — если дочерний процесс является Supervisor, это механизм, который даёт поддереву достаточно времени для завершения; его также можно использовать с worker, но с осторожностью

  • неотрицательное целое число — количество миллисекунд, которое Supervisor сообщает дочернему процессу для завершения, вызывая Process.exit(child, :shutdown), и затем ожидает сигнала завершения. Если сигнал завершения не получен в течение указанного времени, дочерний процесс безусловно завершается с помощью Process.exit(child, :kill)

Краткое описание

Типы

child_id()

Поддерживаемые значения ID

modules()

Поддерживаемые значения модулей

restart()

Поддерживаемые значения перезапуска

shutdown()

Поддерживаемые значения завершения

spec()

Спецификация Supervisor

strategy()

Поддерживаемые стратегии

worker()

Поддерживаемые значения worker

Функции

supervise(children, options) устарело

Принимает список children (worker или Supervisor) для наблюдения и набор options.

supervisor(module, args, options \\ []) устарело

Определяет указанный module как Supervisor, который будет запущен с заданными аргументами.

worker(module, args, options \\ []) устарело

Определяет указанный module как worker, который будет запущен с заданными аргументами.

Типы

child_id()Исходный код

@type child_id() :: term()

Поддерживаемые значения ID

modules()Исходный код

@type modules() :: :dynamic | [module()]

Поддерживаемые значения модулей

restart()Исходный код

@type restart() :: :permanent | :transient | :temporary

Поддерживаемые значения перезапуска

shutdown()Исходный код

@type shutdown() :: timeout() | :brutal_kill

Поддерживаемые значения завершения

spec()Исходный код

@type spec() ::
  {child_id(), start_fun :: {module(), atom(), [term()]}, restart(), shutdown(),
   worker(), modules()}

Спецификация Supervisor

strategy()Исходный код

@type strategy() :: :simple_one_for_one | :one_for_one | :one_for_all | :rest_for_one

Поддерживаемые стратегии

worker()Исходный код

@type worker() :: :worker | :supervisor

Поддерживаемые значения worker

Функции

supervise(children, options)Source

Данная функция устарела. Используйте новые спецификации для детей, описанные в модуле Supervisor.
@spec supervise([spec()],
  strategy: strategy(),
  max_restarts: non_neg_integer(),
  max_seconds: pos_integer()
) :: {:ok, tuple()}

Принимает список children (рабочие процессы или надзорные процессы) для надзора и набор options.

Возвращает кортеж, содержащий спецификацию надзорного процесса. Этот кортеж может быть использован в качестве значения возврата обратного вызова Supervisor.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 обязательна и по умолчанию позволяет максимум 3 перезапуска в течение 5 секунд. Подробное описание доступных стратегий можно найти в модуле Supervisor.

supervisor(module, args, options \\ [])Source

Данная функция устарела. Используйте новые спецификации для детей, описанные в модуле Supervisor.
@spec supervisor(module(), [term()],
  restart: restart(),
  shutdown: shutdown(),
  id: term(),
  function: atom(),
  modules: modules()
) :: spec()

Определяет указанный module как надзорный процесс, который будет запущен с заданными аргументами.

supervisor(module, [], restart: :permanent)

По умолчанию, функция start_link вызывается на указанном модуле. В целом, значения по умолчанию для параметров:

[
  id: module,
  function: :start_link,
  restart: :permanent,
  shutdown: :infinity,
  modules: [module]
]

Дополнительную информацию об имеющихся параметрах можно найти в разделе «Параметры надзорного процесса и рабочих процессов» в модуле Supervisor.Spec.

worker(module, args, options \\ [])Source

Данная функция устарела. Используйте новые спецификации для детей, описанные в модуле Supervisor.
@spec 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.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.13.4/Supervisor.Spec.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API