Запуск определенной функции по истечении 2 часов после наступления события в Django
В настоящее время я работаю над проектом Django .Use case - когда я добавляю объект устройства в базу данных, если он не появляется в сети в первые 2 часа после добавления, то мне нужно удалить этот объект устройства из базы данных .
я написал функцию delete_device_from_db() которая удаляет устройство, если оно не появляется в сети.Как вызвать эту функцию ровно через 2 часа после добавления устройства.
В нашем проекте мы используем celery для запуска фоновых и периодических задач. Какой лучший способ решить эту проблему. можно ли решить ее с помощью celery?
Не запускайте задачу celery только для того, чтобы держать ее в паузе в течение 2 часов. Это не лучший подход. Это заставит вашего celery worker быть занятым. Что произойдет, если несколько устройств отключится? Это полностью заблокирует ваше приложение.
Я рекомендую вам сделать задачу celery beat, которая запускается каждые 5 минут и выполняет проверку времени последнего обновления даты каждого устройства.
from django.utils import timezone
if (timezone.now() - device.updated) > datetime.timedelta(hours=2):
device.delete_device_from_db()
P.S. Я предполагаю, что модель вашего устройства имеет поле updated
. Если нет, добавьте его.
updated = models.DateTimeField(auto_now=True)