Ответ
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