Spec-Zone.ru › Elixir 1.3

Задача.Наблюдатель

Наблюдатель за задачей.

Этот модуль определяет наблюдателя, который может использоваться для динамического наблюдения за задачами. За кулисами этот модуль реализован как :simple_one_for_one наблюдатель, где рабочие процессы являются временными (то есть они не перезапускаются после завершения).

См. модуль Task для получения дополнительной информации.

Регистрация имени

Наблюдатель Task.Supervisor подчиняется тем же правилам регистрации имени, что и GenServer. Подробнее об этом в документации GenServer.

Краткое описание

Функции

async(наблюдатель, функция)

Запускает задачу, на которой можно ожидать результата

async(наблюдатель, модуль, функция, аргументы)

Запускает задачу, на которой можно ожидать результата

async_nolink(наблюдатель, функция)

Запускает задачу, на которой можно ожидать результата

async_nolink(наблюдатель, модуль, функция, аргументы)

Запускает задачу, на которой можно ожидать результата

children(наблюдатель)

Возвращает все идентификаторы дочерних процессов

start_child(наблюдатель, функция)

Запускает задачу как дочерний процесс данного supervisor

start_child(наблюдатель, модуль, функция, аргументы)

Запускает задачу как дочерний процесс данного supervisor

start_link(параметры \\ [])

Запускает нового наблюдателя

terminate_child(наблюдатель, pid)

Завершает дочерний процесс с заданным pid

Функции

async(наблюдатель, функция)

async(Supervisor.supervisor, (... -> any)) :: Task.t

Запускает задачу, на которой можно ожидать результата.

supervisor должен быть ссылкой, как определено в Task.Supervisor. Задача всё ещё будет связана с вызывающим её процессом, см. Task.async/3 для получения дополнительной информации и async_nolink/2 для варианта без связи.

async(наблюдатель, модуль, функция, аргументы)

async(Supervisor.supervisor, module, atom, [term]) :: Task.t

Запускает задачу, на которой можно ожидать результата.

supervisor должен быть ссылкой, как определено в Task.Supervisor. Задача всё ещё будет связана с вызывающим её процессом, см. Task.async/3 для получения дополнительной информации и async_nolink/2 для варианта без связи.

async_nolink(наблюдатель, функция)

async_nolink(Supervisor.supervisor, (... -> any)) :: Task.t

Запускает задачу, на которой можно ожидать результата.

supervisor должен быть ссылкой, как определено в Task.Supervisor. Задача не будет связана с вызывающим её процессом, см. Task.async/3 для получения дополнительной информации.

Совместимость с поведением OTP

Если вы создаёте задачу с помощью async_nolink внутри поведения OTP, например, GenServer, вы должны обработать сообщение, пришедшее от задачи, в вашем handle_info обработчике.

Ответ, отправленный задачей, будет иметь формат {ref, result}, где ref — ссылка на монитор, хранимая в структуре задачи, а result — возвращаемое значение функции задачи.

Обратите внимание, что независимо от того, как завершается задача, созданная с помощью async_nolink, вызывающий процесс всегда получит сообщение :DOWN с тем же значением ref, хранимым в структуре задачи. Если задача завершается нормально, причина в сообщении :DOWN будет :normal.

async_nolink(наблюдатель, модуль, функция, аргументы)

async_nolink(Supervisor.supervisor, module, atom, [term]) :: Task.t

Запускает задачу, на которой можно ожидать результата.

supervisor должен быть ссылкой, как определено в Task.Supervisor. Задача не будет связана с вызывающим её процессом, см. Task.async/3 для получения дополнительной информации.

children(наблюдатель)

children(Supervisor.supervisor) :: [pid]

Возвращает все идентификаторы дочерних процессов.

start_child(наблюдатель, функция)

start_child(Supervisor.supervisor, (... -> any)) :: {:ok, pid}

Запускает задачу как дочерний процесс данного supervisor.

Обратите внимание, что запущенный процесс не связан с вызывающим процессом, а только с наблюдателем. Эта команда полезна в случае, если задача должна выполнить побочные эффекты (например, ввод-вывод) и не должна сообщать вызывающему процессу.

start_child(наблюдатель, модуль, функция, аргументы)

start_child(Supervisor.supervisor, module, atom, [term]) :: {:ok, pid}

Запускает задачу как дочерний процесс данного supervisor.

Аналогично start_child/2, за исключением того, что задача задается указанным module, fun и args.

start_link(параметры \\ [])

start_link(Supervisor.options) :: Supervisor.on_start

Запускает нового наблюдателя.

Поддерживаемые параметры:

  • :name — используется для регистрации имени наблюдателя, поддерживаемые значения описаны в разделе Name Registration документации модуля GenServer;

  • :restart — стратегия перезапуска, может быть :temporary (по умолчанию), :transient или :permanent. См. Supervisor.Spec для получения дополнительной информации. По умолчанию :temporary, поэтому задачи не будут автоматически перезапускаться при завершении или в случае сбоя;

  • :shutdown — :brutal_kill если задачи должны быть убиты при выходе или целое число, обозначающее значение таймаута, по умолчанию 5000 миллисекунд;

  • :max_restarts и :max_seconds — как указано в Supervisor.Spec.supervise/2;

terminate_child(наблюдатель, pid)

terminate_child(Supervisor.supervisor, pid) :: :ok

Завершает дочерний процесс с заданным pid.

© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.3.4/Task.Supervisor.html

Spec-Zone.ru

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