Spec-Zone.ru › Elixir 1.15

Supervisor.Spec

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

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

Функции в этом модуле устарели и не работают с спецификациями дочерних процессов на основе модулей, представленными в Elixir версии 1.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], где модуль — имя модуля обратного вызова только в том случае, если дочерний процесс является 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()

Поддерживаемые значения идентификаторов

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

Поддерживаемые значения идентификаторов

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

Spec-Zone.ru

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