Вместо того, чтобы использовать crontab, Django может выполнить что-то автоматически в заданное время - PullRequest
1 голос
/ 17 ноября 2010

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

Например, мое приложение django должно загружать ftp на удаленные серверы в заранее определенное время.Адреса ftp-сервера, имена пользователей, пароли, время, день и частота были определены в модели django.

Я хочу запустить загрузку файла автоматически на основе значений, хранящихся в модели.

Один из способов сделать это - написать скрипт на python и добавить его в crontab.Этот скрипт выполняется каждую минуту и ​​следит за значениями времени, определенными в модели.

Другая вещь, о которой я могу приблизительно думать, может быть, это сигналы django.Я не уверен, что они справятся с этой проблемой.Есть ли способ генерировать сигналы в определенное время (еще не прочитал подробно о них).

Ответы [ 4 ]

2 голосов
/ 17 ноября 2010

Только для записи - есть также сельдерей , который позволяет планировать сообщения для будущей отправки.Это, однако, зверь, отличный от cron, так как он требует / использует RabbitMQ и предназначен для очередей сообщений.

0 голосов
/ 18 ноября 2010

Проблема, которую вы описываете, лучше всего решается с помощью cron, а не Django напрямую. Так как кажется, что вам нужно хранить данные о ваших загрузках ftp в вашей базе данных (используя Django для доступа к ним для журналов или графиков или чего-либо еще), вы можете создать скрипт на python, который использует Django и работает через cron.

Джеймс Беннетт написал отличную статью о том, как это сделать, которую вы можете прочитать полностью здесь: http://www.b -list.org / weblog / 2007 / sep / 22 / standalone-django-scripts /

Основная суть в том, что вы можете писать автономные сценарии django, которые cron может периодически запускать и запускать, и эти сценарии могут полностью использовать вашу базу данных Django, модели и все, что они захотят. Это дает вам гибкость для запуска любого кода, который вам нужен, и заполнения вашей базы данных, при этом не пытаясь заставить Django делать то, чего не было предназначено (Django - это веб-фреймворк, управляемый событиями, а не временем).

Удачи!

0 голосов
/ 17 ноября 2010

У меня был действительно хороший опыт с Джанго-хронографом .

Вам необходимо установить одну задачу crontab: вызвать команду управления питоном хронографа, которая затем запускает другие настраиваемые команды управления на основе настраиваемого администратором расписания

0 голосов
/ 17 ноября 2010

Я недавно думал об этом и нашел django-cron , который, похоже, будет делать то, что вы хотите.

Редактировать: Также, если вы не ищете специально решение на основе Django, я недавно использовал scheduler.py , который представляет собой небольшой файл-скрипт, который хорошо работает и прост в использовании.

...