Возрастное ограничение 12+

FastAPI + Taskiq: отложенные задачи и asyncio

26.06.2025 31:37 Обучение

Описание

Подключаем Taskiq + RabbitMQ к нашему FastAPI приложению.

В отличие от Celery, Taskiq позволяет запускать задачи с asyncio.
Помимо этого очевидного плюса у Taskiq ещё много преимуществ: использование аннотаций типов, чтобы нам было легче писать код, улучшенная производительность в сравнении с Celery и Dramatiq, а также интеграции с FastAPI, FastStream, aiohttp, aiogram.

В этом видео смотрим на Taskiq + aio-pika, не используем интеграции.

=== Правки ===
Лучше и надежнее применять настройки логгинга в стартапе брокера.

Для брокеров есть механизм, схожий с lifespan: https://taskiq-python.github.io/guide/state-and-deps.html#state
Так что можно сделать вот так:

```python
@broker.on_event(TaskiqEvents.WORKER_STARTUP)
async def startup(state: TaskiqState) -﹥ None:
logging.basicConfig(...)
```

Вот тут изменение в коде:
https://github.com/mahenzon/FastAPI-base-app/commit/db1f74282f4ecb00518c179190f6877f9a2b7102


Ещё, в связке с FastAPI лучше использовать taskiq_fastapi. Так можно будет переиспользовать зависимости из FastAPI в тасках. Например, чтобы было удобнее ходить в БД.

Похоже, что нужен ещё один ролик по Taskiq 🙂

======


Ранний доступ к моей новой образовательной программе про полный цикл разработки веб-приложений на Python (скидка по ссылке): https://stepik.org/a/232803/pay?promo=40b2fd9952f9efa3

Общение и самые свежие анонсы в Телеграм: https://t.me/Khorenyan

Телеграм чат для бустеров (любой уровень) https://boosty.to/mahenzon

Все-все ссылки на все мои площадки: https://taplink.cc/mahenzon

Код тут:
https://github.com/mahenzon/FastAPI-base-app/tree/e9488ae6970c55ffc818ad7e282ec64f152284f1

Документация:
https://taskiq-python.github.io/


Метки:
00:00 Привет
00:50 Установка
03:22 Подготовка
06:25 Экземпляр
08:30 Настройки
11:03 startup и shutdown
12:47 Задача на отправку письма
23:10 Запуск воркера
26:57 Логирование
30:44 Итоги

Автор

Сурен Хоренян
Сурен Хоренян