Ответ
Для организации фоновых задач в Python применяют специализированные библиотеки, которые работают в связке с брокером сообщений (например, Redis или RabbitMQ).
Ключевые решения:
-
Celery Самый мощный и популярный фреймворк для распределенных задач. Поддерживает несколько брокеров и бэкендов для хранения результатов. Идеален для высоконагруженных и сложных систем.
# tasks.py from celery import Celery # Требуется запущенный Redis или RabbitMQ app = Celery('tasks', broker='redis://localhost:6379/0') @app.task def send_email(to, content): print(f"Sending email to {to}...") # Логика отправки письма return f"Email sent to {to}" # Вызов задачи: # from tasks import send_email # send_email.delay("user@example.com", "Hello!")
-
RQ (Redis Queue) Простая и легковесная библиотека, использующая исключительно Redis. Отличный выбор для проектов, где не требуется вся мощь Celery.
# worker.py from redis import Redis from rq import Queue def count_words(text): return len(text.split()) # Подключение к Redis q = Queue(connection=Redis()) # Постановка задачи в очередь # job = q.enqueue(count_words, "This is a sample text.")
-
Huey Легковесная альтернатива Celery. Поддерживает Redis, SQLite или файловую систему в качестве хранилища. Проще в настройке, чем Celery, но обладает меньшим функционалом.
# tasks.py from huey import RedisHuey huey = RedisHuey('my-app') @huey.task() def process_image(image_id): print(f"Processing image {image_id}") # Логика обработки return True
Сводка:
- Celery: Стандарт для production, максимальная гибкость и масштабируемость.
- RQ: Простота и тесная интеграция с Redis.
- Huey: Легковесность и минимальные зависимости.