В настоящее время я работаю над проектом python, который требует реализации некоторых фоновых заданий (в основном для отправки электронной почты и значительных обновлений базы данных). Я использую Redis для брокера задач. Итак, в этом пункте у меня есть два кандидата: сельдерей и RQ . У меня был некоторый опыт работы с этими очередями заданий, но я хочу попросить вас, ребята, поделиться своим опытом использования этих инструментов. Так.
- Какие плюсы и минусы использовать Celery vs. RQ.
- Любые примеры проектов / задач, подходящих для использования Celery vs. RQ.
Сельдерей выглядит довольно сложно, но это полнофункциональное решение. На самом деле я не думаю, что мне нужны все эти функции. С другой стороны, RQ очень прост (например, конфигурация, интеграция), но кажется, что в нем отсутствуют некоторые полезные функции (например, отзыв задач, автоматическая перезагрузка кода).
Ответы:
Вот что я обнаружил, пытаясь ответить на тот же самый вопрос. Вероятно, он не является исчерпывающим и может даже быть неточным по некоторым вопросам.
Короче говоря, RQ спроектирован так, чтобы быть проще. Сельдерей создан быть более крепким. Они оба отличные.
Мониторинг. Цветок сельдерея и панель управления RQ очень просты в настройке и предоставляют вам не менее 90% всей информации, которую вы когда-либо хотели.
Брокерская поддержка. Celery - явный победитель, RQ поддерживает только Redis. Это означает меньше документации о том, «что такое брокер», но также означает, что вы не сможете менять брокера в будущем, если Redis больше не работает для вас. Например, Instagram рассматривал и Redis, и RabbitMQ с Celery . Это важно, потому что разные брокеры имеют разные гарантии, например, Redis не может (на момент написания) гарантировать 100% доставку ваших сообщений.
Приоритетные очереди. Модель очереди приоритетов RQ проста и эффективна - рабочие читают из очередей по порядку . Для использования сельдерея требуется несколько рабочих процессов из разных очередей. Оба подхода работают
Поддержка ОС. Здесь явным победителем является сельдерей, поскольку RQ работает только в системах, поддерживающих,
fork
например, системы Unix.Языковая поддержка. RQ поддерживает только Python, тогда как Celery позволяет отправлять задачи с одного языка на другой.
API. Celery чрезвычайно гибок (несколько бэкэндов результатов, хороший формат конфигурации, поддержка холста рабочего процесса), но, естественно, эта сила может сбивать с толку. Напротив, RQ api прост.
Поддержка подзадач. Celery поддерживает подзадачи (например, создание новых задач из существующих). Я не знаю, есть ли у RQ
Сообщество и стабильность. Celery, вероятно, более устоявшийся, но оба они являются активными проектами. На момент написания у Celery ~ 3500 звезд на Github, а у RQ ~ 2000, и оба проекта активно развиваются.
На мой взгляд, Celery не так сложен, как может показаться его репутация, но вам придется использовать RTFM.
Итак, почему кто-то захочет обменять (возможно, более полнофункциональный) сельдерей на RQ? На мой взгляд, все сводится к простоте. Ограничивая себя Redis + Unix, RQ предоставляет более простую документацию, более простую кодовую базу и более простой API. Это означает, что вы (и потенциальные участники вашего проекта) можете сосредоточиться на коде, который вам нужен, вместо того, чтобы хранить подробности о системе очереди задач в своей рабочей памяти. У всех нас есть ограничение на то, сколько деталей может быть в нашей голове одновременно, и, устранив необходимость хранить там детали очереди задач, RQ позволяет вернуться к коду, который вам нужен. Эта простота достигается за счет таких функций, как межъязыковые очереди задач, широкая поддержка ОС, 100% надежные гарантии сообщений и возможность легко переключать брокеров сообщений.
источник
Subtask support. Celery supports subtasks (e.g. creating new tasks from within existing tasks). I don't know if RQ does
На 24.05.2019 RQ также поддерживает подзадачи (внутренний вызов очереди).Сельдерей не так уж и сложен. По сути, вы выполняете пошаговую настройку из файла
tutorials
, создаетеcelery
экземпляр, украшаете свою функцию, а@celery.task
затем запускаете задачу с помощьюmy_task.delay(*args, **kwargs)
.Судя по вашей собственной оценке, вам кажется, что вам нужно выбирать между отсутствием (ключевых) функций или наличием лишнего. В моей книге это не слишком сложный выбор.
источник
No such file or directory
. Понятия не имею, с чего начать. Сегодня вечером я впервые попробую RQ.