Spec-Zone.ru › Elixir 1.14

Supervisor.Spec

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

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

Функции в этом модуле устарели и не работают с основанными на модуле спецификациями потомков, представленными в 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 — атом, определяющий, когда завершённый процесс потомка должен быть перезапущен (см. раздел «Значения перезапуска» ниже)

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

  • :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)

Сводка

Типы

child_id()

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

modules()

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

restart()

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

shutdown()

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

spec()

Спецификация диспетчера

strategy()

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

worker()

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

Функции

supervise(children, options) устаревшая

Получает список children (рабочих или диспетчеров) для наблюдения и набор options.

supervisor(module, args, options \\ []) устаревшая

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

worker(module, args, options \\ []) устаревшая

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

Типы

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()}

Спецификация диспетчера

strategy()Источник

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

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

worker()Источник

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

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

END_OF_DOCUMENT_MARKER

Функции

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.14.1/Supervisor.Spec.html

Spec-Zone.ru

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