Вопрос или проблема
Согласно документации django channels:
http://channels.readthedocs.io/en/latest/concepts.html?highlight=celery#next-steps
Однако одно, что каналы не делают, это гарантировать доставку. Если вам нужна уверенность, что задачи будут выполнены, используйте систему, разработанную для этого с повторными попытками и сохранением (например, Celery), или, альтернативно, создайте команду управления, которая проверяет выполнение и повторно отправляет сообщение в канал, если ничего не выполнено (по сути, создавая свою собственную логику повторных попыток).
Я работал с celery несколько лет назад. Да, это здорово, это много, этого слишком много. Я бы хотел этого избежать.
Я ищу простую очередь задач с гарантией доставки и повторной отправкой в случае неудачи.
python-rq. Но у этого есть другие недостатки, такие как использование формата данных pickle вместо json.
Друг сказал мне совет:
https://github.com/furious-luke/django-cq
Выглядит хорошо.
Из документации
Попытка реализовать распределенную очередь задач для использования с Django channels. Смоделировано по образцу RQ и Celery, возможны сложные рабочие процессы задач, все это использует механизмы Channels.
Ответ или решение
Для создания системы очереди задач, аналогичной Celery, но более легковесной и подходящей для использования с Django Channels, стоит рассмотреть несколько вариантов. Основываясь на ваших потребностях — обеспечить гарантированную доставку задач и возможность повторной отправки при сбоях — приведем более подробный обзор доступных решений.
Понимание проблематики
Согласно документации Django Channels, эта система не гарантирует доставку сообщений или выполнение задач. В случаях, когда важна надежность и точность выполнения, рекомендуется использовать подготовленные решения вроде Celery. Однако вы упомянули, что хотите избежать его использования из-за его сложности и громоздкости.
Альтернативы Celery
-
django-cq: Это решение, рекомендованное вашим другом, представляет собой распределенную очередь задач, интегрированную с Django Channels. Оно спроектировано с соблюдением принципов RQ и Celery. Основные преимущества:
- Легкость интеграции: django-cq может использовать платформу Django для отправки и получения задач, что позволяет легче реализовать функциональность.
- Поддержка сложных рабочих процессов: вы можете настраивать более комплексные сценарии обработки задач.
- Гарантированная доставка: по сути, система обеспечивает проверку выполнения задач и повторную отправку в случае их неуспеха.
В документации описывается, как можно использовать django-cq для реализации сложных рабочих процессов на базе Django Channels. Это может стать отличным решением для вашего проекта, обеспечивая необходимые функции без избыточных настроек и сложностей, связанных с Celery.
-
Собственная реализация очереди: Если вы хотите полностью контролировать процесс выполнения и можете позволить себе больше времени на разработку, вы можете реализовать упрощенную очередь задач самостоятельно. Основные элементы:
- Используйте базу данных для хранения задач и их состояния (например, Django модели).
- Реализуйте фоновый процесс (например, с помощью management command), который будет проверять состояние задач и повторно отправлять их в случае сбоя.
- Можно использовать Django Channels для отправки уведомлений о статусах выполнения задач, что даст вам возможность сохранять взаимодействие в реальном времени.
Преимущества и недостатки
-
django-cq:
- Преимущества:
- Простота интеграции
- Гарантированная доставка и управление состоянием задач
- Поддержка более сложных сценариев
- Недостатки:
- Может не поддерживать все функции, которые предоставляет Celery, особенно в сложных рабочих процессах.
- Преимущества:
-
Собственная реализация:
- Преимущества:
- Полный контроль над процессом и логикой
- Оптимизация под специфические нужды вашего приложения
- Недостатки:
- Требует больше времени на разработку
- Необходимо учитывать множество деталей, связанных с обработкой ошибок и состояниями задач.
- Преимущества:
Заключение
В зависимости от вашей ситуации, django-cq может стать идеальным выбором для реализации легковесной и эффективной системы обработки сообщений и задач, обладая всеми необходимыми функциями. Если вы ищете что-то более индивидуальное с точки зрения настроек и функционала, также можно рассмотреть возможность создания собственной системы, учитывая все плюсы и минусы.
Выбор подходящего решения будет зависеть не только от технических требований, но и от масштабируемости, а также долгосрочных целей вашего проекта.