web-dev-qa-db-fra.com

En quoi les chaînes Django diffèrent-elles du céleri?

Récemment, j'ai appris à connaître les chaînes Django. Quelqu'un peut-il me dire la différence entre les chaînes et le céleri, ainsi que l'endroit où utiliser le céleri et les chaînes.

22
Vinay Singh

Canaux in Django sont destinés au traitement asynchrone des requêtes.
Le modèle standard Django utilise est Request-Response mais qui a des limitations importantes. Nous ne pouvons rien faire en dehors des restrictions de ce modèle.
Les canaux ont permis la prise en charge de Web Socket et la création d'applications complexes autour de Web Sockets, afin que nous puissions envoyer plusieurs messages, gérer des sessions, etc.

Celery est une chose complètement différente, c'est une file d'attente de tâches/file d'attente de tâches asynchrone basée sur le passage de messages distribués. Il s'agit principalement de mettre les tâches en file d'attente et de les planifier pour qu'elles s'exécutent à des intervalles spécifiques.

En termes simples, les canaux sont utilisés lorsque vous avez besoin communication de données asynchrones comme une application de chat, et Celery sert à planifier des tâches et des événements comme un serveur qui raconte le Web pour un certain type de nouvelles à intervalles fixes.

32
Meghdeep Ray
  • Canaux in Django est pour WebSocket, long-poll HTTP.

  • Céleri est pour la tâche en arrière-plan, la file d'attente.

6
Robert Lu

Les canaux Django donnent à Django la capacité de gérer plus que de simples requêtes HTTP, y compris les Websockets et HTTP2. Considérez cela comme une communication duplex bidirectionnelle qui se produit de manière asynchrone Pas de rafraîchissement du navigateur. Plusieurs clients peuvent envoyer et recevoir des données via websocket et Django orchestrent cet exemple d'intercommunication une conversation de groupe avec des clients accédant simultanément en même temps. Vous pouvez obtenir un traitement en arrière-plan de code de longue durée similaire à celui d'un céleri à un certain mesure, mais l'application des canaux est différente de celle du céleri.

Le céleri est une file d'attente de tâches/file d'attente de tâches asynchrone basée sur la transmission de messages distribués. Ainsi que la planification. En termes simples, je veux lancer et exécuter une tâche en arrière-plan ou je veux avoir une tâche périodique qui se déclenche et s'exécute à l'arrière sur un intervalle défini. Vous pouvez également déclencher une tâche de manière synchrone, ainsi que déclencher et attendre la fin et continuer. Donc, la principale différence réside dans le cas d'utilisation qu'ils servent et les objectifs des cadres

4
Timothy Mugayi

D'autres réponses expliquaient grandement la différence, mais en fait, les canaux et le céleri peuvent tous deux effectuer des tâches groupées asynchrones en commun.

Les canaux et le céleri utilisent tous deux un backend pour les messages et les démons de travail. Donc, le même genre de chose pourrait être implémenté avec les deux.

Mais gardez à l'esprit que le céleri est principalement conçu pour et peut gérer la plupart des problèmes de mise en commun des tâches (tentatives, backend de résultat, etc.), où les canaux ne sont absolument pas faits pour.

3
Zulu

Channels est un projet qui prend Django et étend ses capacités au-delà de HTTP - pour gérer les sockets Web, les protocoles de chat, les protocoles IoT, etc.). Il est construit sur un = Python spécification appelée ASGI.

Changements de canaux Django pour tisser du code asynchrone en dessous et à travers le noyau synchrone de Django, permettant aux projets Django de gérer non seulement HTTP, mais aussi des protocoles qui nécessitent également des connexions de longue durée) - WebSockets, MQTT, chatbots, radio amateur, etc.

Il le fait tout en préservant la nature synchrone et facile à utiliser de Django, vous permettant de choisir la façon dont vous écrivez votre code - synchrone dans un style comme Django, entièrement asynchrones ou un mélange des deux) En plus de cela, il fournit des intégrations avec le système d'authentification de Django, le système de session, etc., ce qui facilite plus que jamais l'extension de votre projet HTTP uniquement à d'autres protocoles.

Il regroupe également cette architecture événementielle avec des couches de canaux, un système qui vous permet de communiquer facilement entre les processus et de séparer votre projet en différents processus.

Celery est une file d'attente de tâches asynchrone basée sur le passage de messages distribués. Il fournit des fonctionnalités pour exécuter des opérations en temps réel et planifier certaines tâches à exécuter plus tard. Ces tâches peuvent être exécutées de manière asynchrone ou synchrone, cela signifie que vous pouvez préférer les exécuter en arrière-plan ou les enchaîner pour qu'une tâche soit exécutée après l'exécution réussie d'une autre tâche.

3
Lokesh Pathak

Chaînes Django:

au-delà de HTTP - pour gérer les WebSockets, les protocoles de chat, les protocoles IoT, etc.

  1. Transmet des messages entre le client et le serveur (connexion duplex intégral)

  2. Gérer les requêtes HTTP et Web-sockets

  3. Asynchrone

Exemple:

  • Application de chat en temps réel
  • Mettre à jour les flux sociaux
  • Jeu multijoueur
  • Envoi de notifications

Céleri:

Il s'agit d'une file d'attente de tâches axée sur le traitement en temps réel, tout en prenant en charge la planification des tâches.

  1. Effectuer des tâches d'arrière-plan de longue durée

  2. Effectuer des tâches périodiques

  3. Asynchrone

Exemple:

  • Traitement des vidéos/images
  • Envoi d'e-mails en masse

Lectures complémentaires

Exemple de céleri et Django Channels

asynchrone vs synchrone