Недавно я узнал о каналах Django. Может ли кто-нибудь сказать мне разницу между каналами и сельдереем, а также где использовать сельдерей и каналы.
Чем каналы Django отличаются от сельдерея?
Ответы (6)
Каналы в Django предназначены для асинхронной обработки запросов.
Django использует стандартную модель "запрос-ответ", но она имеет существенные ограничения. Мы ничего не можем сделать за пределами ограничений этой модели.
Каналы появились для обеспечения поддержки веб-сокетов и создания сложных приложений на основе веб-сокетов, чтобы мы могли отправлять несколько сообщений, управлять сеансами и т. д.
Celery — это совсем другое, это асинхронная очередь задач/задач, основанная на распределенной передаче сообщений. Это в первую очередь для постановки задач в очередь и планирования их выполнения через определенные промежутки времени.
Проще говоря, каналы используются, когда вам нужна асинхронная передача данных, например приложение чата, а Celery для планирования задач и событий, таких как просмотр сервером в Интернете новостей определенного типа через фиксированные промежутки времени.
Каналы Django дают Django возможность обрабатывать больше, чем просто HTTP-запросы, включая веб-сокеты и HTTP2. Думайте об этом как о двусторонней дуплексной связи, которая происходит асинхронно, без обновления браузера. Несколько клиентов могут отправлять и получать данные через веб-сокет, а каналы django организуют этот пример взаимодействия в виде группового чата с одновременным доступом клиентов. Вы можете добиться фоновой обработки длинного кода, аналогичного сельдерею, в определенной степени, но применение каналов отличается от сельдерея.
Celery — это асинхронная очередь задач/очередь заданий, основанная на распределенной передаче сообщений. Как и расписание. С точки зрения непрофессионала, я хочу запускать и запускать задачу в фоновом режиме, или я хочу иметь периодическую задачу, которая запускается и выполняется сзади с заданным интервалом. Вы также можете запустить задачу синхронно, а также запустить и дождаться завершения и продолжить. Таким образом, ключевое различие заключается в сценарии использования, которому они служат, и целях фреймворков.
Другие ответы в значительной степени объяснили разницу, но на самом деле каналы и сельдерей могут выполнять асинхронные объединенные задачи вместе.
Каналы и Celery используют серверную часть для сообщений и рабочих демонов. Таким образом, одно и то же может быть реализовано с обоими.
Но имейте в виду, что Celery в первую очередь предназначен и может справиться с большинством проблем объединения задач (повторные попытки, серверная часть результатов и т. д.), тогда как каналы совершенно не предназначены.
Channels — это проект, который использует Django и расширяет его возможности за пределы HTTP — для обработки веб-сокетов. , протоколы чата, протоколы Интернета вещей и многое другое. Он построен на спецификации Python под названием ASGI.
Каналы изменяют Django, чтобы вплетать асинхронный код в синхронное ядро Django и через него, позволяя проектам Django обрабатывать не только HTTP, но и протоколы, требующие длительных соединений, — WebSockets, MQTT, чат-боты, любительское радио и многое другое.
При этом сохраняется синхронный и простой в использовании характер Django, что позволяет вам выбирать способ написания кода — синхронный в стиле представлений Django, полностью асинхронный или сочетание того и другого. Кроме того, он обеспечивает интеграцию с системой аутентификации Django, системой сеансов и т. д., что упрощает расширение вашего HTTP-проекта на другие протоколы.
Он также объединяет эту управляемую событиями архитектуру с уровнями каналов, системой, которая позволяет вам легко взаимодействовать между процессами и разделять ваш проект на разные процессы.
Celery – это асинхронная очередь задач, основанная на распределенной передаче сообщений. Он предоставляет функции для запуска операций в реальном времени и планирования некоторых задач для последующего выполнения. Эти задачи могут выполняться асинхронно или синхронно, это означает, что вы можете предпочесть их запуск в фоновом режиме или цепочку, чтобы одна задача выполнялась после успешного выполнения другой задачи.
Каналы Django:
помимо HTTP — для обработки WebSockets, протоколов чата, протоколов IoT и т. д.
Передает сообщения между клиентом и сервером (полное дуплексное соединение)
Обработка запросов HTTP и веб-сокетов
Асинхронный
Пример:
- Приложение для чата в реальном времени
- Обновите социальные каналы
- Многопользовательская игра
- Отправка уведомлений
Сельдерей:
Это очередь задач, ориентированная на обработку в реальном времени, а также поддерживающая планирование задач.
Выполнять длительные фоновые задачи
Выполнение периодических задач
Асинхронный
Пример:
- Обработка видео/изображений
- Отправка массовых писем
Дополнительная литература
Пример каналов Celery и Django