Module de publication / abonnement / envoi Python recommandé? [fermé]
-
02-07-2019 - |
Question
De PyPubSub :
Pypubub fournit un moyen simple pour votre application Python à découpler ses composants: parties de votre application peut publier des messages (avec ou sans données) et d’autres pièces peuvent abonnez-vous / recevez-les. Ceci permet message " expéditeurs " et message "auditeurs" ignorer chacun autre:
- l'un n'a pas besoin d'importer l'autre
- un expéditeur n'a pas besoin de savoir
- " qui " récupère les messages,
- ce que les auditeurs feront des données,
- ou même si un auditeur récupère les données du message.
- De même, les auditeurs n'ont pas à se soucier de l'origine des messages.
C’est un excellent outil pour mettre en œuvre une architecture modèle-vue-contrôleur ou toute architecture similaire favorise le découplage de ses composants.
Il semble exister de nombreux modules Python pour la publication / l'abonnement flottants sur le Web, de PyPubSub à PyDispatcher simple " cuit à la maison " classes.
Existe-t-il des avantages et des inconvénients spécifiques lors de la comparaison de différents modules? Quels ensembles de modules ont été analysés et comparés?
Merci d'avance
La solution
PyDispatcher est fortement utilisé dans Django et cela fonctionne parfaitement pour moi (et pour toute la communauté Django, je suppose).
Si je me souviens bien, certains problèmes de performances se sont produits:
- La vérification des arguments effectuée par PyDispatcher est lente.
- Les connexions inutilisées entraînent une surcharge inutile.
J'espère que cela vous aidera.
Autres conseils
Le meilleur package de dispatch pour python semble être le module de dispatch inside django (appelé signaux dans la documentation). Il est indépendant du reste de Django et est court, documenté, testé et très bien écrit.
Modifier: Ce projet a été transformé en un projet de signal indépendant pour Python.
J'ai récemment examiné attentivement py-amqplib pour agir en tant que client AMQP auprès d'un Courtier RabbitMQ. Ce dernier outil est écrit en Erlang.
Si vous souhaitez découpler votre application. alors pourquoi le coupler à la langue elle-même? Pensez à utiliser des files de messages neutres en termes de langue et vous aurez alors de la place pour grandir!
Cela étant dit, l’AMQP s’efforce de comprendre et risque d’être plus que ce que vous êtes prêt à accepter si votre application le permet. fonctionne très bien tel quel. YMMV.
En voici un plus récent: https://github.com/shaunduncan/smokesignal . " smokesignal est une simple bibliothèque python pour envoyer et recevoir des signaux. Il s’inspire du framework de signaux Django, mais est conçu comme une variante à usage général. " Exemple:
from time import sleep
import smokesignal
@smokesignal.on('debug')
def verbose(val):
print "#", val
def main():
for i in range(100):
if i and i%10==0:
smokesignal.emit('debug', i)
sleep(.1)
main()
Certaines bibliothèques que j'ai trouvées et qui n'ont pas encore été mentionnées:
- Circuits - une structure légère, axée sur les événements et dotée d'une architecture de composants puissante.
- Recette d'événement C #
Il existe également les bibliothèques de PJ Eby, RuleDispatch et le projet PEAK, spécialement Trellis. Je ne sais pas quel est leur statut mais la liste de diffusion est très active.
Dernière version de Trellis sur PyPi
J'ai également utilisé les composants du projet Kamaelia de la BBC. Axon est une approche intéressante, mais plus inspirée par les composants que par les éditeurs et les consommateurs. Eh bien, son site Web n’est pas du tout à jour du tout au tout ... Il y avait un projet ou deux dans le SoC Google 2008 et le travail est en cours.
Je ne sais pas si cela aide:)
Modifier: je viens de trouver Py-notify , qui est un " non orthodoxe " implémentation du motif Observer. Il possède la plupart des fonctionnalités dont j'ai besoin pour mes propres outils.
Le seul fait que PyPubSub semble être un projet géré de manière chaotique (le wiki sur SF est mort, le site Web (un autre wiki) qui est lié à SF est en panne) serait une raison suffisante pour que je ne l'utilise pas. PyDispatcher a un site Web intact, mais la seule documentation qu'ils semblent fournir est celle de l'API générée à partir des docstrings. Pas de trafic sur la liste de diffusion non plus ... un mauvais signe!
Comme Mike l'a également mentionné, il est parfaitement possible de choisir une solution indépendante de Python. Maintenant, ne vous méprenez pas, j'aime aimer Python, mais néanmoins, dans ce domaine, il est logique d'utiliser un cadre qui est découplé du langage de programmation.
Je n'ai pas l'habitude de la messagerie, mais je compte examiner quelques solutions. Jusqu'à présent, ces deux projets (gratuits et à code source ouvert) semblent être les plus prometteurs pour moi (comme par hasard, les deux sont des projets Apache):
Les deux semblent être des projets raisonnablement arrivés à maturité, du moins en ce qui concerne la documentation et la communauté. Je ne peux cependant pas faire de commentaire sur la qualité du logiciel. Comme je l'ai dit, je n'ai utilisé aucun logiciel.
Qpid est livré avec des bibliothèques clientes pour Python, mais vous pouvez également utiliser py-amqplib . . Pour ActiveMQ, il existe pyactivemq , un lien que vous pouvez utiliser pour vous connecter via STOMP (Streaming Messaging Oriented Messaging Protocole) ou via Openwire.