@undeadter

Как запустить задачу Celery с отсрочкой по времени?

Есть Django модель, которая имеет поле is_activated. При создании нового объекта модели is_activated автоматически принимает значение False. Чтобы данное поле стало True пользователь должен в течении 20 минут выполнить определенное условие. Если в течении 20 минут пользователь не выполнил данное условию - удалять аккаунт.

Можно ли задать для задачи таймер отсрочку исполнения задачи. Т.е. поставить задачу в очередь только через 20 минут после сохранения объекта модели для проверки is_activated.

Или лучше выполнять задачу каждые n-секунд и проверять время создания обьекта модели?
Или есть более лучшие решения данной задачи?
  • Вопрос задан
  • 1623 просмотра
Решения вопроса 1
@FulTupFul
А я считаю, что лучше использовать обычные задачи с отсрочкой по времени:
@app.task
def main(id):
    pass

main.apply_async(kwargs={"id": id}, countdown=20 * 60)
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
inoise
@inoise
Solution Architect, AWS Certified, Serverless
Добавьте поле expired_at и по нему блокируете попытки авторизоваться после его истечения. А чистить аккаунты можно по cron хоть раз в минуту
Ответ написан
Комментировать
alfss
@alfss
https://career.habr.com/alfss
Комментировать
ulkoart
@ulkoart
celery

Periodic Tasks, отлично подойдут для такого. expired_at тоже решение, но опять же нужно будет раз в N времени запускать задачу на удаление подобных записей, если конечно нет задачи их хранить.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы