Почему выполнение запланированных задач с использованием Celery предпочтительнее, чем crontab?
Учитывая, что Celery уже является частью стековой архитектуры для запуска очередей задач (т.е. он не добавляется просто для выполнения cron-задач, что, на мой взгляд, является излишним), меня интересует следующее:
Какие преимущества может дать функция "периодических задач" в Celery в качестве замены crontab? Я ищу информацию по следующим пунктам:
- Основные плюсы и минусы по сравнению с crontab
- Сценарии использования, в которых Celery является более предпочтительным выбором, чем crontab
- Специфический случай для Django: Celery против crontab для запуска периодических задач, если Celery уже включен в стек как
django-celery
для очереди задач Django.
2 ответ(ов)
Я использовал cron для своего производственного сайта, но в текущем проекте перешел на Celery. Я гораздо больше предпочитаю Celery, чем cron, вот почему:
- Celery в сочетании с Celerybeat обеспечивает более тонкую настройку, чем cron. Cron не может запускаться чаще чем раз в минуту, в то время как Celery может (у меня есть задача, которая выполняется каждые 90 секунд и проверяет очередь электронной почты для отправки сообщений, а также другая, которая очищает список онлайн-пользователей).
- В строке cron необходимо вызывать скрипт или уникальную команду с абсолютным путем и информацией о пользователе. Celery вызывает функции Python, не нужно писать больше, чем код.
- С Celery для развертывания на другом компьютере, как правило, нужно просто скопировать ваш код, который обычно находится в одном месте. Развертывание с помощью cron потребует больше усилий (вы можете автоматизировать это, но…).
- Я действительно считаю, что Celery лучше подходит для рутинной очистки (кэш, база данных) и, в общем, для коротких задач. Создание дампа базы данных больше подходит для cron, так как вы не хотите загромождать очередь событий слишком долгими задачами.
- Не менее важно, что Celery легко распределяется между машинами.
Celery следует использовать в тех случаях, когда необходимо координировать задания на нескольких машинах, гарантировать выполнение задач даже при добавлении или удалении машин из рабочей группы, устанавливать время истечения для задач, определять многоступенчатые задачи с зависимостями в стиле графа, а не линейными зависимостями, или когда нужно иметь единое хранилище логики планирования, которое будет одинаково работать на разных операционных системах и версиях.
Превысил ли Django 100 тыс. посещений в день? [закрыто]
Как отменить последнюю миграцию?
Как получить значения GET-запроса в Django?
Разделение бизнес-логики и доступа к данным в Django
Как выполнить поиск в стиле getattr() в шаблоне Django