@PiggyPig

Как выполнять функцию в одно и то же время в Django?

Задача следующая: выполнять функцию во views в одно и то же время - допустим, каждый день в 12:00.
Нашел такой вариант с Timer

import datetime as dt

def print_text():
    print("Hi!")
nextDay = dt.datetime.now() + dt.timedelta(days=1)
dateString = nextDay.strftime('%d-%m-%Y') + " 12-00-00"
newDate = nextDay.strptime(dateString,'%d-%m-%Y %H-%M-%S')
delay = (newDate - dt.datetime.now()).total_seconds()
Timer(delay, print_text, ()).start()

Но будет ли он вообще продолжать отсчет, если обновится страница и соответственно произойдет повторный вызов функции таймера?
Помогите пожалуйста разобраться.
  • Вопрос задан
  • 948 просмотров
Решения вопроса 2
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Код web-приложений на Django и многих других фреймворках выполняется только в ответ на http-запрос от пользователя и завершается сразу после того, как вернёт ответ. Если код не вернёт ответ в течении нескольких секунд, он будет принудительно завершён сервером. Поэтому даже запустить ваш код с таймером нормально не получится.

Самый простой способ выполнять фоновые задачи в Django - написать собственную management command и вызывать её cron'ом. Более продвинутый и функциональный способ - это использовать какой-нибудь механизм асинхронного выполнения задач, типа Celery.
Ответ написан
Комментировать
syschel
@syschel
freelance/python/django/backend
А на cron повешать не пробовали? Он же как раз и нужен для запуска скриптов по таймеру.

Я думаю вы не с той стороны подошли к задаче. Кроном же стартовать джанговские вещи можно или через Celery или через менеджеры. Либо вообще просто питон файл вызывать, а внём функцию через __main__
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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