Задачи Celery
Celery используется в платформе для выполнения фоновых и отложенных задач. Он позволяет вынести ресурсоёмкие операции из основного веб‑процесса и выполнить их асинхронно, не блокируя пользователя. Очередь задач обеспечивает отказоустойчивость и возможность масштабирования.
Структура задачи
Задача представляет собой обычную функцию Python, помеченную декоратором @celery_app.task. Внутри функции размещается бизнес‑логика, которую необходимо выполнить в фоне.
from corpai_platform.celery_app import celery_app
@celery_app.task(name="generate_report")
def generate_report(user_id: int) -> None:
"""Подготовка отчёта для пользователя."""
# длительные вычисления или операции ввода‑вывода
...
Вызвать задачу можно методом .delay() или .apply_async(), что поставит её в очередь на выполнение воркером.
Запуск воркера
Для запуска воркера Celery выполните команду:
celery -A corpai_platform.celery_app worker
Она подключится к брокеру сообщений, определённому в настройках, и начнёт выполнять задачи из очереди.
Пример добавления новой задачи
- Импортируйте приложение Celery и объявите функцию с декоратором
@celery_app.task. - Добавьте необходимую логику внутри функции.
- В месте использования вызовите задачу через
.delay().
# backend/example.py
from corpai_platform.celery_app import celery_app
@celery_app.task(name="cleanup_old_data")
def cleanup_old_data() -> None:
"""Удаление устаревших записей из базы данных."""
...
# где-то в коде приложения
cleanup_old_data.delay()
Таким образом задача будет выполнена асинхронно, а основное приложение продолжит работу без задержек.