Перейти к содержанию

Deferrable-операторы (Deferrable operators)

Deferrable-оператор откладывает выполнение задачи. Классический сенсор занимает слот воркера на всё время ожидания; deferrable-оператор освобождает воркер до срабатывания триггера.

Сенсор занимает слот воркера
Процесс deferrable-оператора
Deferrable задача в Grid

Вместо того чтобы занимать воркер в ожидании (например, сенсор), задача передаёт управление триггеру (асинхронная функция в компоненте Triggerer). Когда условие выполняется, триггер отправляет событие, задача снова ставится в очередь и выполняется. Так экономятся ресурсы воркера и повышается масштабируемость.

Триггер наследуется от BaseTrigger, реализует метод run() (async generator, yield TriggerEvent при готовности). Оператор наследует BaseOperator и использует метод defer() с указанием триггера и даты/метаданных. Вместо классического сенсора с poke_interval используется deferrable-версия (например, TimeSensorAsync, провайдерские сенсоры с суффиксом Async).

Плюсы: меньше занятых слотов воркера, быстрее реакция при большом числе сенсоров. Требуется запущенный Triggerer. Многие сенсоры из провайдеров имеют deferrable-варианты; можно реализовать свой триггер и оператор.

Подробнее: Deferrable operators, Triggerer.


← Custom XCom | К содержанию | Event-driven →