Я работал над веб-приложением с использованием Django, и мне любопытно, есть ли способ запланировать периодическое выполнение задания.
По сути, я просто хочу пробежаться по базе данных и делать некоторые вычисления / обновления на регулярной основе автоматически, но я не могу найти какую-либо документацию по этому вопросу.
Кто-нибудь знает, как это настроить?
Чтобы уточнить: я знаю, что могу настроить cron
работу для этого, но мне любопытно, есть ли какая-то функция в Django, которая обеспечивает эту функцию. Я бы хотел, чтобы люди могли самостоятельно развернуть это приложение, не прибегая к настройке (желательно к нулю).
Я подумал о том, чтобы инициировать эти действия «задним числом», просто проверив, нужно ли было запускать задание с момента последней отправки запроса на сайт, но я надеюсь на что-то более чистое.
Ответы:
Одно из решений, которое я использовал, заключается в следующем:
1) Создайте пользовательскую команду управления , например
2) Используйте
cron
(в Linux) илиat
(в Windows) для запуска моей команды в требуемое время.Это простое решение, которое не требует установки тяжелого стека AMQP. Тем не менее, есть некоторые преимущества использования чего-то вроде сельдерея, упомянутые в других ответах. В частности, с Celery было бы неплохо не распространять логику вашего приложения в файлы crontab. Однако решение cron довольно хорошо работает для приложений малого и среднего размера, где вам не нужно много внешних зависимостей.
РЕДАКТИРОВАТЬ:
В более поздней версии Windows
at
команда устарела для Windows 8, Server 2012 и выше. Вы можете использоватьschtasks.exe
для того же использования.**** ОБНОВЛЕНИЕ **** Это новая ссылка django doc для написания пользовательской команды управления
источник
python manage.py runcrons
крона, который затем запускает все кроны, которые вы определили и зарегистрировали.Celery - это распределенная очередь задач, построенная на AMQP (RabbitMQ). Он также обрабатывает периодические задачи в стиле крона (см. Периодические задачи ). В зависимости от вашего приложения, это может стоить того.
Celery довольно легко настроить с помощью django ( docs ), и периодические задачи фактически пропускают пропущенные задачи в случае простоя. У сельдерея также есть встроенные механизмы повтора, в случае неудачи.
источник
Мы с открытым исходным кодом, что я думаю, является структурированным приложением. это решение Брайана тоже намекает. Мы будем рады любым / всем отзывам!
https://github.com/tivix/django-cron
Он поставляется с одной командой управления:
Это делает работу. Каждый крон моделируется как класс (так что все его ОО), и каждый крон работает с разной частотой, и мы удостоверяемся, что один и тот же тип крона не работает параллельно (в случае, если самим кронам требуется больше времени, чем их частоте!)
источник
at
или был разработан специально для работыcron
?Если вы используете стандартную ОС POSIX, вы используете cron .
Если вы используете Windows, вы используете в .
Напишите команду управления Django
Выясните, на какой платформе они находятся.
Либо выполните соответствующую команду «AT» для своих пользователей, либо обновите crontab для своих пользователей.
источник
Интересное новое подключаемое приложение Django: django-хронограф
Вам нужно только добавить одну запись cron, которая действует как таймер, и у вас есть очень приятный интерфейс администратора Django для запуска скриптов.
источник
Посмотрите на Cron Django Poor Man's, который является приложением Django, которое использует спам-ботов, роботов индексации поисковых систем и т. П. Для запуска запланированных задач примерно через равные промежутки времени.
Смотрите: http://code.google.com/p/django-poormanscron/
источник
Некоторое время назад у меня было точно такое же требование, и я решил его с помощью APScheduler ( Руководство пользователя )
Это делает планирование заданий очень простым и сохраняет его независимым от выполнения кода на основе запросов. Ниже приведен простой пример.
Надеюсь, это кому-нибудь поможет!
источник
Предложение Брайана Нила о запуске команд управления через cron работает хорошо, но если вы ищете что-то более надежное (но не такое сложное, как Celery), я бы заглянул в такую библиотеку, как Kronos :
источник
RabbitMQ и Celery имеют больше возможностей и возможностей для обработки задач, чем Cron. Если сбой задачи не является проблемой, и вы думаете, что будете обрабатывать сломанные задачи в следующем вызове, то Cron достаточно.
Celery & AMQP позволит вам справиться с неработающей задачей, и другой работник снова выполнит ее (рабочие Celery ожидают выполнения следующей задачи), пока не
max_retries
будет достигнут атрибут задачи . Вы даже можете вызывать задачи при сбое, например, регистрировать сбой или отправлять электронное письмо администратору послеmax_retries
он будет достигнут.И вы можете распространять серверы Celery и AMQP, когда вам нужно масштабировать ваше приложение.
источник
Лично я использую cron, но части планирования заданий в django-extensions выглядят интересно.
источник
Хотя Airflow не является частью Django, это более свежий проект (по состоянию на 2016 год), который полезен для управления задачами.
Airflow - это система автоматизации и планирования рабочих процессов, которую можно использовать для создания и управления конвейерами данных. Веб-интерфейс предоставляет разработчику ряд возможностей для управления и просмотра этих конвейеров.
Воздушный поток написан на Python и построен с использованием Flask.
Airflow был создан Maxime Beauchemin в Airbnb и открыт с весны 2015 года. Он присоединился к программе инкубации Apache Software Foundation зимой 2016 года. Вот страница проекта Git и некоторая дополнительная справочная информация .
источник
Поместите следующее в начало вашего файла cron.py:
источник
Я просто подумал об этом довольно простом решении:
Вы можете добавить параметры, но просто добавив параметры в URL.
Скажите мне, что вы, ребята, думаете.
[Update] Я сейчас использую команду runjob из django-extensions вместо curl.
Мой cron выглядит примерно так:
... и так далее ежедневно, ежемесячно и т. д. Вы также можете настроить его для запуска определенной работы.
Я нахожу это более управляемым и более чистым. Не требует сопоставления URL-адреса с представлением. Просто определите свой класс работы и crontab, и все готово.
источник
после части кода я могу написать что угодно, как и мои views.py :)
от http://www.cotellese.net/2007/09/27/running-external-scripts-against-django-models/
источник
Вы обязательно должны проверить Django-Q! Он не требует дополнительной настройки и, возможно, имеет все необходимое для решения любых производственных проблем коммерческих проектов.
Он активно развивается и очень хорошо интегрируется с django, django ORM, mongo, redis. Вот моя конфигурация:
источник
Джанго APScheduler для планировщика рабочих мест. Advanced Python Scheduler (APScheduler) - это библиотека Python, которая позволяет планировать выполнение кода Python позднее, либо один раз, либо периодически. Вы можете добавлять новые рабочие места или удалять старые на лету, как вам угодно.
примечание: я автор этой библиотеки
Установите APScheduler
Просмотр файловой функции для вызова
имя файла: scheduler_jobs.py
Настройка планировщика
сделайте файл execute.py и добавьте следующие коды
Ваши написанные функции Здесь, функции планировщика написаны в scheduler_jobs
Свяжите файл для выполнения
Теперь добавьте строку ниже в нижней части файла URL
источник
У меня было что-то похожее с твоей проблемой сегодня.
Я не хотел, чтобы он обрабатывался сервером через cron (и большинство библиотек в итоге были просто помощниками cron).
Итак, я создал модуль планирования и прикрепил его к init .
Это не лучший подход, но он помогает мне хранить весь код в одном месте, а его выполнение связано с основным приложением.
источник
Да, метод выше, так здорово. И я попробовал некоторые из них. Наконец-то я нашел такой метод:
Так же, как рекурсивный .
Хорошо, я надеюсь, что этот метод может удовлетворить ваши требования. :)
источник
Более современное решение (по сравнению с Celery) - Django Q: https://django-q.readthedocs.io/en/latest/index.html
Он имеет отличную документацию и легко прогуливается. Поддержка Windows отсутствует, поскольку Windows не поддерживает разветвление процессов. Но это прекрасно работает, если вы создаете свою среду разработки, используя подсистему Windows для Linux.
источник
Я использую сельдерей для создания своих периодических заданий. Сначала вам нужно установить его следующим образом:
Не забудьте зарегистрироваться
django-celery
в настройках, и тогда вы сможете сделать что-то вроде этого:источник
Я не уверен, что это будет полезно для всех, так как мне пришлось предоставлять другим пользователям системы для планирования заданий, не предоставляя им доступ к фактическому планировщику задач сервера (windows), я создал это приложение многократного использования.
Обратите внимание, что пользователи имеют доступ к одной общей папке на сервере, где они могут создавать необходимые файлы command / task / .bat. Эта задача может быть запланирована с помощью этого приложения.
Название приложения Django_Windows_Scheduler
Скриншот:
источник
Если вы хотите что - то более надежное , чем сельдерей , попробуйте TaskHawk , который построен на вершине AWS SQS / SNS .
См .: http://taskhawk.readthedocs.io
источник
Для простых докеризованных проектов я не мог найти подходящий ответ.
Поэтому я написал очень скромное решение без необходимости использования внешних библиотек или триггеров, которое работает само по себе. Не требуется внешний os-cron, он должен работать в любой среде.
Это работает путем добавления промежуточного программного обеспечения:
middleware.py
models/cron.py
:settings.py
:источник
Простой способ - написать собственную команду оболочки, см. Документацию Django и выполнить ее, используя cronjob в linux. Однако я очень рекомендую использовать брокер сообщений, такой как RabbitMQ, в сочетании с сельдереем. Может быть, вы можете взглянуть на этот учебник
источник