Learning Platform
Глоссарий Troubleshooting
Урок 10.01 · 10 мин
Продвинутый
TriggererDeferrableAIP-40asyncio

Triggerer и Deferrable Operators — обзор модуля

Deferrable operators (AIP-40, 2.2+) — фундаментальное улучшение для долгоживущих sensors. Раньше sensor в poke mode блокировал worker slot на часы, или в reschedule mode попадал в queue каждые N секунд. Deferrable — async event loop держит тысячи triggers без блокировки worker.

Уроки модуля

#УрокЧто внутри
01Обзор модуляТекущий урок
02Triggerer architectureasyncio event loop, single process, HA через SKIP LOCKED
03BaseTrigger anatomyserialize(), run() (async gen), TriggerEvent
04Custom deferrable operatorConversion of sync sensor → async, real-world example
05TaskSuccessEvent (2.10+)Триггер завершает task без возврата на worker
06HA triggererMultiple triggerer instances, queue separation

Ключевые концепты

Lifecycle deferrable task

  1. Task в worker вызывает self.defer(trigger=MyTrigger(...), method_name="execute_complete").
  2. Worker сериализует trigger → пишет в таблицу trigger → TI state=deferred → освобождает slot.
  3. Triggerer берёт trigger (SELECT ... FOR UPDATE SKIP LOCKED — multiple triggerer-ов работают параллельно).
  4. asyncio loop запускает trigger.run() — async generator.
  5. Trigger yields TriggerEvent → triggerer пишет event в БД, TI → scheduled.
  6. Worker подбирает task заново, вызывает execute_complete(event).

Custom Trigger пример

class DateTimeTrigger(BaseTrigger):
    def __init__(self, moment):
        self.moment = moment

    def serialize(self):
        return ("path.to.DateTimeTrigger", {"moment": self.moment})

    async def run(self):
        while self.moment > utcnow():
            await asyncio.sleep(1)   # NB: asyncio, не time.sleep
        yield TriggerEvent(self.moment)

Scaling сравнение

Sensor mode1 worker slot, 1 sensor1000 sensors
poke1 worker slot занят1000 worker slots занято — катастрофа
reschedule0 worker slot между1000 ti в task_reschedule table, постоянный churn
deferred0 worker slot, 1 trigger в asyncio1 triggerer process, 1000 active triggers — норм

Killer takeaway

Любой sensor с timeout > 1 час должен быть deferrable=True. Это фундаментальное правило production Airflow. Triggerer asyncio scale handles 5000+ одновременных triggers на одном процессе.

Закончили урок?

Отметьте его как пройденный, чтобы отслеживать свой прогресс

Войдите чтобы оценить урок

Прогресс модуля
0 из 6