Система, подобная Celery, на основе Django Channels

Вопрос или проблема

Согласно документации 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

  1. django-cq: Это решение, рекомендованное вашим другом, представляет собой распределенную очередь задач, интегрированную с Django Channels. Оно спроектировано с соблюдением принципов RQ и Celery. Основные преимущества:

    • Легкость интеграции: django-cq может использовать платформу Django для отправки и получения задач, что позволяет легче реализовать функциональность.
    • Поддержка сложных рабочих процессов: вы можете настраивать более комплексные сценарии обработки задач.
    • Гарантированная доставка: по сути, система обеспечивает проверку выполнения задач и повторную отправку в случае их неуспеха.

    В документации описывается, как можно использовать django-cq для реализации сложных рабочих процессов на базе Django Channels. Это может стать отличным решением для вашего проекта, обеспечивая необходимые функции без избыточных настроек и сложностей, связанных с Celery.

  2. Собственная реализация очереди: Если вы хотите полностью контролировать процесс выполнения и можете позволить себе больше времени на разработку, вы можете реализовать упрощенную очередь задач самостоятельно. Основные элементы:

    • Используйте базу данных для хранения задач и их состояния (например, Django модели).
    • Реализуйте фоновый процесс (например, с помощью management command), который будет проверять состояние задач и повторно отправлять их в случае сбоя.
    • Можно использовать Django Channels для отправки уведомлений о статусах выполнения задач, что даст вам возможность сохранять взаимодействие в реальном времени.

Преимущества и недостатки

  1. django-cq:

    • Преимущества:
      • Простота интеграции
      • Гарантированная доставка и управление состоянием задач
      • Поддержка более сложных сценариев
    • Недостатки:
      • Может не поддерживать все функции, которые предоставляет Celery, особенно в сложных рабочих процессах.
  2. Собственная реализация:

    • Преимущества:
      • Полный контроль над процессом и логикой
      • Оптимизация под специфические нужды вашего приложения
    • Недостатки:
      • Требует больше времени на разработку
      • Необходимо учитывать множество деталей, связанных с обработкой ошибок и состояниями задач.

Заключение

В зависимости от вашей ситуации, django-cq может стать идеальным выбором для реализации легковесной и эффективной системы обработки сообщений и задач, обладая всеми необходимыми функциями. Если вы ищете что-то более индивидуальное с точки зрения настроек и функционала, также можно рассмотреть возможность создания собственной системы, учитывая все плюсы и минусы.

Выбор подходящего решения будет зависеть не только от технических требований, но и от масштабируемости, а также долгосрочных целей вашего проекта.

Оцените материал
Добавить комментарий

Капча загружается...