Python >> Tutoriel Python >  >> Python

PyPubSub - Création de votre première application de publication et d'abonnement en Python

Avez-vous consulté les actualités aujourd'hui ou reçu une newsletter par e-mail d'une entreprise ? Les deux modes de communication suivent le modèle de communication publication-abonnement. Cet article vous montrera comment implémenter votre propre système pubsub en Python en utilisant le flexible PyPubSub bibliothèque. Si vous connaissez déjà le concept PubSub, n'hésitez pas à passer à la vraie viande :implémenter le système pubsub en Python ! Sinon, restez avec moi pour peaufiner vos bases en informatique !

Concept PubSub

Ce type de communication est à sens unique. L'information circule d'un éditeur vers les abonnés. L'éditeur crée de l'information, l'abonné consomme de l'information. Ainsi, les informaticiens appellent ce modèle de communication le paradigme de publication et d'abonnement - pubsub .

Lorsque vous consultez des actualités, vous recherchez des informations sur des sujets spécifiques tels que le sport ou la technologie. Vous ne vous souciez pas trop de la source tant qu'elle répond à vos besoins. Si vous faites confiance aux informations, que vous les comprenez et qu'elles sont récentes, vous continuez à utiliser le service d'actualités.

Un système pubsub est capable d'atteindre cet objectif. En tant que consommateur, vous enregistrez votre besoin d'informations. Le système fournit ensuite des informations pertinentes qui répondent à vos besoins d'informations.

Un exemple est Google Actualités. Dites-leur vos sujets d'intérêt et votre préférence linguistique. Google transmet ensuite les actualités pertinentes à votre smartphone.

La force de ce paradigme de communication est qu'il découple l'expéditeur et le destinataire. Ils n'ont même pas besoin de se connaître. Avez-vous déjà reçu des recommandations d'articles Google Actualités provenant de sources dont vous n'avez même jamais entendu parler ? Le système pubsub de Google agit comme un intermédiaire chargé d'organiser, de rechercher, de filtrer et de fournir des informations.

Pour les ordinateurs, ce découplage est également excellent. Par exemple, vos appareils domestiques intelligents peuvent s'abonner à un service météo pour réagir rapidement. Votre appareil domestique intelligent n'a besoin de connaître qu'une seule adresse - celle du système pubsub. Un énorme avantage pour les systèmes avec des millions de participants tels que l'Internet des objets.

Dans ce qui suit, je fournirai quelques systèmes Python pubsub, un code sur la façon de les utiliser et des références pour une lecture plus approfondie. Découvrez le système qui vous intéresse le plus !

Présentation du système PyPubSub

Avant de commencer, vous devez comprendre quelques concepts de la bibliothèque PyPubSub. Nous commençons par une brève discussion sur les différents rôles et fonctionnalités de PyPubSub.

Expéditeur du message

Dans les systèmes de publication et d'abonnement, tout est question de message. Les expéditeurs envoient des messages, les auditeurs s'abonnent aux messages. Vous envoyez un message pubsub en appelant le pub.sendMessage() .

Écouteur de messages

Écoute les messages d'un sujet donné. Dans PyPubSub, les écouteurs de message sont des callables, c'est-à-dire des fonctions exécutées par le système PyPubSub sur chaque message d'un sujet donné.

Sujet du message

Chaque message a un sujet. Vous pouvez définir une hiérarchie de sujets avec des sujets parents et des sujets enfants. Un sujet parent est plus générique, un sujet enfant est moins générique.

Données des messages

Un message ne se compose pas seulement d'un sujet, mais également de certaines données ou charges utiles. Vous pouvez définir des données arbitraires comme arguments de mots-clés dans la méthode d'envoi pub.sendMessage(topic, **data) .

Livraison des messages

Tous les messages envoyés d'un sujet donné sont livrés aux auditeurs enregistrés pour ce sujet ou n'importe quel sujet parent. Vous pouvez également écouter tous les sujets en vous inscrivant à la racine de tous les sujets, le parent de tous, appelé ALL_TOPICS .

Il n'y a aucune garantie concernant l'ordre de livraison des messages. Les messages peuvent apparaître dans le désordre mais sont délivrés de manière synchrone :avant qu'un message ne soit délivré au prochain écouteur, l'écouteur précédent doit mettre fin à sa fonction d'écouteur appelable. En d'autres termes, nous n'exécutons pas plusieurs threads sur chaque écouteur pour livrer les messages en parallèle. Au lieu de cela, nous transmettons les messages un auditeur à la fois.

Immuabilité des messages

Les auditeurs ne doivent pas modifier le contenu du message qu'ils reçoivent. Cependant, cela n'est pas vérifié par le système PyPubSub, donc les auditeurs pourraient, en théorie, le faire !

Direction des messages

L'idée de publier s'abonner est à sens unique :les expéditeurs du message envoient le message à tous les auditeurs de ce message. Cependant, vous pouvez passer une fonction de rappel dans les données du message pour permettre aux destinataires d'un message de répondre au message en appelant la fonction de rappel.

Installation de PyPubSub

C'est l'un des modules Python pubsub les plus populaires. Vous pouvez l'avoir ici.

Installation  :Exécutez le code suivant dans votre terminal, shell ou ligne de commande (système d'exploitation).

pip install PyPubSub

PyPubSub Créez votre première application

Un exemple simple de PyPubSub est donné par l'application suivante :

from pubsub import pub


def listener_alice(arg):
    print('Alice receives news about', arg['headline'])
    print(arg['news'])
    print()


def listener_bob(arg):
    print('Bob receives news about', arg['headline'])
    print(arg['news'])
    print()


# Register listeners
pub.subscribe(listener_alice, 'football')
pub.subscribe(listener_alice, 'chess')
pub.subscribe(listener_bob, 'football')

# Send messages to all listeners of topics
pub.sendMessage('football', arg={'headline': 'Ronaldo',
                                 'news': 'Sold for $1M'})
pub.sendMessage('chess', arg={'headline': 'AI',
                              'news': 'AlphaZero beats grandmaster Carlsen'})

Tout d'abord, vous créez deux écouteurs, qui sont des fonctions appelables pouvant être exécutées par le système PyPubSub :

  • listener_alice(arg)
  • listener_bob(arg)

Les deux auditeurs reçoivent des données arg c'est un dictionnaire à deux clés :'headline' et 'news' . Cela pourrait être une notification push avec un titre et la chaîne de nouvelles réelle.

Deuxièmement, vous vous assurez que les deux auditeurs s'abonnent à un ou plusieurs sujets afin qu'ils soient appelés dès qu'un message concernant le sujet est envoyé. Bob écoute le sujet 'football' , tandis qu'Alice écoute deux sujets 'football' et 'chess' . Pour cela, vous utilisez la fonction pub.subscribe(topic, *data) .

Troisièmement, vous envoyez deux messages "d'actualité" :

  • sujet :'football'
  • sujet :'chess'

Le résultat est le suivant :

Alice receives news about Ronaldo
Sold for $1M

Bob receives news about Ronaldo
Sold for $1M

Alice receives news about AI
AlphaZero beats grandmaster Carlsen

Vous pouvez voir qu'Alice reçoit les messages d'actualité sur les deux sujets 'football' et 'chess' tandis que Bob ne reçoit que le message d'actualité sur le sujet 'football' .

Il s'agit de l'utilisation la plus basique du modèle de publication d'abonnement en Python.

Références

  • https://pypubsub.readthedocs.io/
  • https://pypi.org/project/PyPubSub/
  • https://stackoverflow.com/questions/115844/recommended-python-publish-subscribe-dispatch-module