Запуск определенной функции по истечении 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)
Вернуться на верх