Ответ
Очередь задач (Task Queue) — это архитектурный паттерн, используемый для управления и распределения задач (заданий), которые должны быть выполнены асинхронно, вне основного потока приложения.
Ключевая цель — отвязать (decouple) выполнение долгих или ресурсоемких операций от основного потока, который, например, обрабатывает HTTP-запрос. Это повышает отзывчивость и масштабируемость системы.
Основные компоненты:
- Продюсер (Producer): Приложение, которое создает задачу и помещает ее в очередь.
- Очередь/Брокер (Queue/Broker): Хранилище сообщений (например, RabbitMQ, Redis), которое принимает задачи от продюсеров и доставляет их воркерам.
- Воркер (Worker/Consumer): Процесс, который забирает задачи из очереди и выполняет их.
Основные сценарии использования:
- Фоновая обработка: Отправка email, генерация отчетов, обработка видео.
- Отложенные задачи: Выполнение задачи в определенное время в будущем.
- Распределение нагрузки: Несколько воркеров могут разбирать задачи из одной очереди, повышая пропускную способность.
Простой пример на Python (in-memory очередь):
from queue import Queue
import threading
# Воркер, который выполняет задачи из очереди
def worker(q):
while True:
task = q.get() # Блокируется, пока не появится задача
print(f"Processing task: {task}")
q.task_done()
q = Queue()
# Запускаем воркера в отдельном потоке
threading.Thread(target=worker, args=(q,), daemon=True).start()
# Продюсер добавляет задачи в очередь
for i in range(5):
q.put(f"Task {i}")
q.join() # Ожидаем, пока очередь не станет пустой
print("All tasks are done.")
В реальных системах используются более мощные брокеры сообщений и фреймворки, такие как RabbitMQ, Apache Kafka, Celery, Dramatiq, RQ (Redis Queue).