Планирование регулярного мероприятия: альтернативы Cron/Cron (включая сельдерей)
То, что у меня было интересное, регулярно управляет определенным набором действий с регулярными временными интервалами. Очевидно, что это задача для cron, правильно?
К сожалению, Интернет, похоже, немного расходится.
Позвольте мне подробно рассказать о моей настройке. Во-первых, моя среда разработки находится в Windows, а моя производственная среда размещена на Webfaction (Linux). В Windows нет реального cron, не так ли? Кроме того, я использую Django! И что предложили для Django?
Celery, конечно! К сожалению, создание сельдерея для меня было более или менее буквальным кошмаром - см. Сообщение об ошибке "Нет обработчиков для многопроцессорности журналов" , используя Celery. И это только ОДНА проблема, с которой я столкнулся с сельдереем. Другие включают ошибку сокета, из-за которой я единственный, кто когда-либо столкнулся с проблемой.
Не поймите меня неправильно, сельдерей кажется ДЕЙСТВИТЕЛЬНО здоровым. К сожалению, кажется, что нет поддержки, и некоторые нечетные ограничения встроены в его предпочтительный бэкэнд, RabbitMQ. К сожалению, как ни крути программа, если она не работает, ну, она не работает!
То, что я надеюсь, что вы все можете войти. Мне бы хотелось узнать о cron или cron-эквиваленте, который можно настроить аналогично (желательно идентично) как в среде Windows, так и в Linux.
(Я боролся с сельдереем уже около двух недель и, к сожалению, думаю, что настало время бросить полотенце и отказаться от него, по крайней мере, на данный момент.)
Ответы
Ответ 1
Простым, не относящимся к Celery, подходом к решению проблем будет создание пользовательских команд django-admin для выполнения асинхронных или запланированных задач.
Затем в Windows вы используете команду at
для планирования этих задач. В Linux вы используете cron
.
Я также настоятельно рекомендую отключить Windows, если это возможно, для среды разработки. Ваша жизнь будет намного лучше на Linux или даже Mac OSX. Например, переназначьте запасную или старую машину с Ubuntu или запустите Ubuntu на виртуальной машине на вашем компьютере с Windows.
Ответ 2
У меня была такая же проблема, и я попытался решить ее с помощью сельдерея (слишком сложного) или cron (внешний для приложения) и в итоге нашел Advanced Python Scheduler, Только начал использовать его, но он кажется достаточно зрелым и стабильным, имеет приличную документацию и будет принимать ряд форматов планирования (например, стиль cron).
Из документации, запустив функцию с определенным интервалом.
from apscheduler.scheduler import Scheduler
sched = Scheduler()
sched.start()
def hello_world():
print "hello world"
sched.add_interval_job(hello_world,seconds=10)
Это неблокирование, и я запускаю что-то довольно идентичное, просто импортируя модуль из моего urls.py
. Надеюсь, это поможет.
Ответ 3
https://github.com/andybak/django-cron
Запуск одной задачи cron, но все планирование и настройка выполняются в Python.
Ответ 4
Django Chronograph - отличная альтернатива. Вам нужно только настроить один cron, а затем сделать все в django admin. Вы можете планировать задачи/команды из управления django.