Celery beat — планировщик периодических задач для Celery. Он не выполняет задачи сам, а по расписанию добавляет их в очередь; отдельные исполнители Celery получают и выполняют эти задачи.
Что такое Celery beat? Как запустить периодическую задачу?
Подробный ответ
Что такое Celery beat
Celery beat — отдельный процесс-планировщик. Он работает по заданному расписанию и ставит задачи в брокер сообщений. Затем их забирают обычные исполнители Celery.
Celery beat
|
| добавляет задачу по расписанию
v
Брокер сообщений
|
v
Исполнитель Celery
|
v
Выполнение задачиПример задачи
from celery import shared_task
@shared_task
def cleanup_expired_tokens() -> None:
delete_expired_tokens()Расписание через интервал
from datetime import timedelta
app.conf.beat_schedule = {
'cleanup-expired-tokens-every-hour': {
'task': 'app.tasks.cleanup_expired_tokens',
'schedule': timedelta(hours=1),
},
}Расписание в формате cron
from celery.schedules import crontab
app.conf.beat_schedule = {
'daily-report-at-two-am': {
'task': 'app.tasks.create_daily_report',
'schedule': crontab(hour=2, minute=0),
},
}Запуск
celery -A config worker -l info
celery -A config beat -l infoИсполнитель и планировщик обычно запускаются отдельными процессами. Запуск beat вместе с исполнителем через флаг -B может быть удобен локально, но для production лучше разделять эти процессы.
Важные правила
задачи по расписанию должны быть идемпотентными, потому что возможны повторные запуски;
не следует запускать несколько независимых экземпляров beat с одним расписанием: это может создать дубликаты задач;
долгие задачи стоит направлять в отдельную очередь, чтобы они не блокировали срочные задачи;
нужно контролировать время выполнения задачи: следующий запуск не должен создавать опасное пересечение с предыдущим.
Как ответить на собеседовании
Celery beat — это планировщик, который по расписанию ставит задачи в очередь, а исполнители Celery выполняют их отдельно. Расписание задаю через интервал или crontab, запускаю beat отдельным процессом и слежу, чтобы в production был один активный планировщик для одного набора расписаний.
Оцени свой прогресс