Что такое Celery и для чего он используется в Python-приложениях

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

Ответ

Celery — это распределенная очередь задач для Python, предназначенная для выполнения ресурсоемких или долгих операций асинхронно, в фоновом режиме. Это позволяет веб-приложению (например, на Django или Flask) быстро отвечать на запрос пользователя, не дожидаясь завершения тяжелой задачи.

Основная задача — разгрузить основной поток приложения, передав выполнение функций специальным фоновым процессам (воркерам).

Ключевые компоненты:

  1. Клиент (Приложение): Инициирует выполнение задачи.
  2. Брокер сообщений (Message Broker): Хранилище для задач. Принимает задачи от клиента и передает их воркерам. Популярные брокеры: RabbitMQ, Redis.
  3. Воркер (Worker): Фоновый процесс, который забирает задачи из очереди и выполняет их.
  4. Бэкенд результатов (Result Backend): Опциональное хранилище для сохранения статуса и результатов выполнения задач (например, Redis, база данных).

Пример использования:

Предположим, нужно отправить письмо после регистрации пользователя. Отправка может занять несколько секунд и заблокировать ответ.

# tasks.py
from celery import Celery
import time

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

@app.task
def send_confirmation_email(user_id):
    # Имитация долгой операции
    print(f"Начинаем отправку письма для пользователя {user_id}...")
    time.sleep(5)
    print(f"Письмо для пользователя {user_id} отправлено.")
    return True

# В коде вашего веб-приложения
# from tasks import send_confirmation_email

# Немедленно возвращает управление, задача выполняется в фоне
# send_confirmation_email.delay(new_user.id)

Для запуска воркера используется команда: celery -A tasks worker --loglevel=info