Spec-Zone.ru › Elixir 1.17

Исходный код 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()

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

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

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

Функции

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.

Скачать версию ePub

Создано с помощью ExDoc (v0.34.1) для языка программирования Elixir

© 2012-2024 The Elixir Team
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.17.2/Supervisor.Spec.html

Spec-Zone.ru

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