Как запустить воркер Celery для выполнения фоновых задач?

«Как запустить воркер Celery для выполнения фоновых задач?» — вопрос из категории Библиотеки и модули, который задают на 10% собеседований Python Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Запуск Celery требует как минимум трех компонентов: приложения с задачами, брокера сообщений (например, Redis или RabbitMQ) и самого воркера, который будет выполнять задачи.

1. Установка зависимостей

Установите Celery и клиент для брокера (в данном примере Redis).

pip install celery redis

2. Определение задач

Создайте файл tasks.py, где будет настроено приложение Celery и определены фоновые задачи.

# tasks.py
from celery import Celery
import time

# Инициализация Celery с указанием имени приложения и URL брокера
app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def add(x, y):
    time.sleep(5) # Имитация долгой операции
    return x + y

3. Запуск воркера

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

celery -A tasks worker --loglevel=info
  • -A tasks: Указывает на модуль (tasks.py), где находится экземпляр Celery (app).
  • worker: Команда для запуска воркера.
  • --loglevel=info: Устанавливает уровень логирования для отладки.

4. Вызов задачи из основного кода

Теперь в вашем основном приложении (например, в Django или FastAPI) вы можете асинхронно вызывать задачу с помощью метода .delay().

from tasks import add

# Задача не блокирует основной поток, а отправляется в очередь брокера
result = add.delay(4, 4)

print(f"Task sent! ID: {result.id}")

Воркер получит задачу из очереди и выполнит ее в фоновом режиме.

Для периодических задач (Celery Beat): Если вам нужно запускать задачи по расписанию, дополнительно запускается планировщик beat: celery -A tasks beat --loglevel=info