Планирование регулярного мероприятия: альтернативы 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. Надеюсь, это поможет.

Ответ 4

Django Chronograph - отличная альтернатива. Вам нужно только настроить один cron, а затем сделать все в django admin. Вы можете планировать задачи/команды из управления django.