Задача.Наблюдатель
Наблюдатель за задачей.
Этот модуль определяет наблюдателя, который может использоваться для динамического наблюдения за задачами. За кулисами этот модуль реализован как :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