При создании веб-приложения вы часто сталкиваетесь с необходимостью выполнения долговременных задач. Например:
- Когда пользователь регистрируется, необходимо отправить подтверждающее письмо.
- Каждую ночь в 12 часов автоматически выполнять задачу по очистке данных.
- Когда пользователь запрашивает выполнение определенной задачи, она должна быть выполнена в установленное время.
Django по умолчанию работает в режиме немедленного ответа на запрос, поэтому нам нужно найти способ асинхронной обработки долгих задач. И вот здесь на помощь приходит Celery! 🚀
Celery — это мощный инструмент, который помогает выполнять асинхронные задачи в Django, а Celery-Beat помогает запускать конкретные задачи в запланированное время.
1️⃣ Как настроить запланированные задачи в Django-Celery-Beat
Существует два основных способа настройки запланированных задач в Celery-Beat.
✅ (1) Настройка через GUI в Django Admin
Django-Celery-Beat поддерживает настройку запланированных задач через GUI в Django Admin.
📌 Особенности
- Без кода вы можете настроить периодические задачи всего за несколько шагов.
- В административной панели Django можно устанавливать и изменять периодические задачи через UI.
- Тем не менее, это статическая настройка, поэтому неудобно изменять ее динамически в зависимости от пользовательских запросов.
📌 Когда это будет полезно?
- Когда не требуется взаимодействие между приложением и пользователем
- Например: автоматически выполнять резервную копию данных каждый день в полночь
- Например: обновлять данные API каждое понедельник утром
✅ (2) Динамическое создание запланированных задач через Python-код
Вы можете прямо в коде создавать запланированные задачи Celery-Beat.
📌 Особенности
- Можно динамически создавать запланированные задачи в зависимости от запросов пользователей.
- Запланированные задачи можно создавать, изменять и удалять через код.
- Без обращения к админ-панели, можно зарегистрировать периодические задачи напрямую из представления.
📌 Когда это будет полезно?
- Когда требуется запланированная задача по определенному запросу пользователя.
- Например: пользователь "заказывает заранее" и регистрация задачи, которая автоматически отменяется через 2 часа.
- Например: если пользователь устанавливает функцию "Напоминание по электронной почте", настройка получения напоминаний по электронной почте в установленное время.
2️⃣ [Практика] Создание запланированной задачи с помощью Python-кода
Шаг 1: Определение задачи Celery
from celery import shared_task
@shared_task
def send_reminder_email(user_id):
# Логика отправки письма реализуется здесь
print(f"📧 Напоминание отправлено пользователю {user_id}!")
Шаг 2: Создание объекта PeriodicTask в Django-Celery-Beat
from django_celery_beat.models import PeriodicTask, IntervalSchedule
import json
# 1️⃣ Создание интервала выполнения (например: каждые 10 минут)
schedule, created = IntervalSchedule.objects.get_or_create(
every=10, # Каждые 10 минут
period=IntervalSchedule.MINUTES
)
# 2️⃣ Создание PeriodicTask
task = PeriodicTask.objects.create(
interval=schedule, # Интервал выполнения
name="Отправить напоминание по электронной почте", # Имя задачи
task="myapp.tasks.send_reminder_email", # Имя Celery Task для выполнения
args=json.dumps([1]), # Передача ID пользователя (пример - пользователь 1)
)
🎯 Заключение: Celery необходим разработчикам Django!
Celery — это незаменимый инструмент для управления асинхронными задачами и их планирования в Django.
Особенно используя Celery-Beat, вы можете настраивать периодические задачи и динамически управлять расписанием в зависимости от определенных событий.
📌 Итак, в кратце:
- Django-Celery-Beat — это мощный инструмент для выполнения запланированных задач.
- С помощью Django Admin (GUI) легко настраивать периодические задачи.
- Создавая задачи через Python-код, вы можете динамически управлять запланированными задачами в зависимости от запросов пользователей.
- Если вы разработчик Django, это обязательно ознакомиться с основными концепциями Celery и Celery-Beat!
🔥 Анонс следующего выпуска
В этом выпуске мы кратко рассмотрели создание запланированных задач Celery-Beat с помощью кода. Однако на практике вы будете использовать более разнообразные поля модели `PeriodicTask` для работы с более сложной логикой.
В следующем выпуске мы подробно рассмотрим как планировать различные задачи и какую роль играют каждое поле модели `PeriodicTask`.
Если вы хотите узнать больше о глубоких возможностях использования Celery, не пропустите следующий выпуск! 🚀
И если вы хотите увидеть больше статей о Celery в блоге,
поиск по списку ниже 'Похожие посты' или в строке поиска в правом верхнем углу по запросу "Celery"! 😊
댓글이 없습니다.