Задать вопрос
@undeadter

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

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

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

Или лучше выполнять задачу каждые n-секунд и проверять время создания обьекта модели?
Или есть более лучшие решения данной задачи?
  • Вопрос задан
  • 1858 просмотров
Подписаться 1 Простой Комментировать
Решения вопроса 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 времени запускать задачу на удаление подобных записей, если конечно нет задачи их хранить.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
Strikt Москва
от 100 000 до 180 000 ₽
ITK academy Саратов
от 75 000 ₽
Sim-Ba Pay Санкт-Петербург
от 180 000 ₽