Spec-Zone.ru › Elixir 1.16

Источник 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)

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

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

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

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

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

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

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

  • :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.32.2) для языка программирования Elixir

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

Spec-Zone.ru

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