Что такое Celery Beat и какова его роль в Celery?

Ответ

Celery Beat — это встроенный в Celery планировщик периодических задач. Его основная функция — отправлять задачи в очередь сообщений по заданному расписанию (например, 'каждый час' или 'каждую полночь').

Важно понимать, что Celery Beat не выполняет задачи сам, а только инициирует их запуск. Непосредственным исполнением занимаются Celery Workers.

Схема работы: Celery Beat (планировщик) -> Брокер сообщений (очередь) -> Celery Worker (исполнитель)

Основные сценарии использования:

  • Регулярные отчеты: Отправка ежедневных, еженедельных или ежемесячных отчетов.
  • Периодическая синхронизация данных: Обновление информации из внешних API через определенные интервалы.
  • Очистка системы: Удаление временных файлов, устаревших записей в базе данных.
  • Мониторинг: Периодическая проверка состояния сервисов.

Пример конфигурации:

# tasks.py
from celery import Celery
from celery.schedules import crontab

app = Celery('tasks', broker='redis://localhost:6379/0')

@app.task
def send_daily_report():
    print("Отправка ежедневного отчета...")
    # ... логика отправки отчета

# Конфигурация расписания для Celery Beat
app.conf.beat_schedule = {
    'send-report-every-morning': {
        'task': 'tasks.send_daily_report', # Путь к задаче
        'schedule': crontab(hour=8, minute=0), # Каждый день в 8:00 утра
    },
}

Запуск Beat и Worker:

Для работы системы необходимо запустить два отдельных процесса:

# 1. Запуск планировщика Celery Beat
celery -A tasks beat --loglevel=info

# 2. Запуск воркера для выполнения задач (в другом терминале)
celery -A tasks worker --loglevel=info