Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про CI/CD: custom, sensor, basesensoroperator

Как реализуется собственный сенсор в Airflow?

Вопрос проверяет понимание внутреннего устройства сенсоров и умение расширять Airflow под свои задачи.

Короткий ответ

Собственный сенсор создаётся путём наследования от BaseSensorOperator. В нём реализуется метод poke, который проверяет условие. Airflow вызывает этот метод с заданным интервалом. Для асинхронной версии используется deferrable-модель и триггеры. Такой подход позволяет реализовать ожидание любых внешних условий.

Длинный ответ

Иногда стандартных сенсоров недостаточно, и тогда требуется написать свой. Airflow предоставляет для этого понятный и расширяемый механизм.

Определение

Custom sensor — это пользовательский сенсор, реализованный через наследование от базового класса Airflow.

1. Классический (blocking) сенсор

Самый простой вариант — синхронный сенсор.

1.1. Базовая структура

Нужно:

  • унаследоваться от BaseSensorOperator;

  • реализовать метод poke.

Пример упрощённой реализации:

from airflow.sensors.base import BaseSensorOperator

class MySensor(BaseSensorOperator):
    def poke(self, context):
        # проверить условие
        return check_condition()

Если poke вернул:

  • True → сенсор завершён;

  • False → Airflow подождёт poke_interval и попробует снова.

2. Deferrable-сенсор

Для долгих ожиданий лучше использовать асинхронную модель.

2.1. Основная идея

Deferrable-сенсор:

  • проверяет условие;

  • если не готово — вызывает defer;

  • передаёт управление trigger-у.

2.2. Упрощённая логика

def execute(self, context):
    if not condition():
        self.defer(trigger=MyTrigger())

Trigger:

  • асинхронно ждёт событие;

  • возвращает управление сенсору.

3. Когда писать свой сенсор

Имеет смысл, если:

  • нет готового сенсора;

  • логика проверки специфична;

  • важно оптимизировать ресурсы.

4. Практические рекомендации

  • всегда задавайте timeout;

  • логируйте проверки;

  • тестируйте сенсор отдельно от DAG.

5. Краткий вывод

Собственные сенсоры позволяют адаптировать Airflow под любые внешние условия. Для коротких ожиданий подойдут blocking-сенсоры, для долгих — deferrable-модель с триггерами.

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    4

  • Сложность:

    8

Навыки

  • CI/CD

    CI/CD

Ключевые слова

#custom

#sensor

#basesensoroperator

Подпишись на Python Developer в телеграм

  • Аватар

    Python Guru

    Sergey Filichkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.