Как выполнить команду в точное время раз в день в Django?

Я работаю над веб-проектом Django, в котором мне нужно создать приложение, которое работает в следующей последовательности:

1) пользователь открывает страницу, в которой ему нужно ввести command и time

2) Приложение Django будет выполнять эту команду в заданное время в каждый день, пока пользователь не покинет планировщик (по умолчанию он равен True)

Проблема в том, что:

1) Как выполнять команды за раз, но каждый день. Чтобы сохранить команды и время, я создал в модели models.py следующую модель

 class commands(models.Model): username = models.ForeignKey(User) command = models.CharField(max_length=30) execution_time = models.DateField() 

У меня есть то же время, но я не получаю правильный способ выполнить его в каждый день в указанное время

и возможно ли это сделать с библиотекой pytz ?

Для выполнения команд я использую библиотеку paramiko

PS: Я не хочу использовать внешнюю библиотеку

  • Как получить общее имя для часового пояса pytz, например. EST / EDT для Америки / New_York
  • Как хранить наивное datetime в Django 1.4
  • Сравнение времени в UTC со временем в восточном времени с использованием Python
  • получить границы DST данного часового пояса в python
  • Проблема с python / pytz Преобразование из локального часового пояса в UTC, затем обратно
  • datetime и timezone с pytz-mind blowing behavior
  • Python - от локального времени DST до UTC
  • Не удалось найти версию, удовлетворяющую требованию pytz
  • 3 Solutions collect form web for “Как выполнить команду в точное время раз в день в Django?”

    Хотя вы могли бы добавить приложение django и удалить задания cron в системе, еще один подход django-ish – использовать Celery . Это система очереди задач, которая может запускать как синхронные, так и асинхронные задачи.

    Одной из характерных черт сельдерея является выполнение запланированных задач: http://packages.python.org/celery/userguide/periodic-tasks.html

     from datetime import timedelta CELERYBEAT_SCHEDULE = { "runs-every-30-seconds": { "task": "tasks.add", "schedule": timedelta(seconds=30), "args": (16, 16) }, } 

    Они также имеют более детальную версию задачи периода, которая реплицирует планирование crontab:

     from celery.schedules import crontab CELERYBEAT_SCHEDULE = { # Executes every Monday morning at 7:30 AM 'every-monday-morning': { 'task': 'tasks.add', 'schedule': crontab(hour=7, minute=30, day_of_week=1), 'args': (16, 16), }, } 

    Сельдерей сам по себе является автономным, но существует конкретная проверка джанго -сельдерея

    Преимущество этого решения заключается в том, что вам не нужно редактировать и поддерживать вкладку cron на системном уровне. Это решение, которое высоко интегрировано в django для этого точного использования.

    Также огромная победа над использованием cron заключается в том, что сельдерей может масштабироваться с вашей системой. Если вы использовали базовую систему crontab, тогда задачи будут расположены на сервере, на котором размещается приложение. Но что, если вам нужно развернуть свой сайт и запустить его на 5 веб-узлах? Вам нужно будет централизовать этот кронтаб. Если вы используете сельдерей, у вас есть большое количество возможностей для транспортировки и хранения заданий. Он по сути распространен и доступен для синхронизации со всеми серверами приложений. Он переносимый.

    Мне кажется, что правильный способ сделать это – написать пользовательскую команду Django и выполнить ее через cron. Но вам, кажется, не повезло, так как другие ощутили подобную потребность и написали пользовательские приложения django. Например, возьмите django-cron .

    Решение вашей проблемы – стандартное приложение cron (планирование задач на системах * nix). Вы можете запланировать скрипт с помощью cron (добавив его в crontab).

    Если ваш скрипт должен выполнить в вашей прикладной среде Django, можно сказать ему, что это нужно сделать с setup_environment функции setup_environment . Подробнее об автономных скриптах для приложений Django вы можете прочитать здесь .

    Interesting Posts

    raw_input и timeout

    Палиндром Python 3.2

    Обработка неопределенной переменной шаблона в Tornado

    Matplotlib различные подсерии размера

    Экземпляр – это «объект», но класс не является подклассом «объекта»: как это возможно?

    Какие проблемы (если они есть) были бы объединены asyncio с многопроцессорной обработкой?

    vim компилируется с неправильной версией python (и не работает с необходимой версией)

    Получить часовой пояс, используемый datetime.datetime.fromtimestamp ()

    Трассировка маршрута и номера строки

    Что означают * и ** перед значением переменной в подписи функции?

    неожиданные различия в размерах памяти при возникновении пула многопроцессорности python

    Получить список всех установленных приложений в Django и их атрибутах

    Потоки python GAE не выполняются параллельно

    Многопоточность для Python Django

    Нормально ли, что запуск python под valgrind показывает много ошибок с памятью?

    Python - лучший язык программирования в мире.