Spec-Zone.ru › Elixir 1.18

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

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

Spec-Zone.ru

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