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

Задачи 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

Она подключится к брокеру сообщений, определённому в настройках, и начнёт выполнять задачи из очереди.

Пример добавления новой задачи

  1. Импортируйте приложение Celery и объявите функцию с декоратором @celery_app.task.
  2. Добавьте необходимую логику внутри функции.
  3. В месте использования вызовите задачу через .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()

Таким образом задача будет выполнена асинхронно, а основное приложение продолжит работу без задержек.