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

Était-ce utile?

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.
Si je comprends bien, il est très peu probable que vous rencontriez ce problème dans une application de taille petite à moyenne. Donc, ces problèmes peuvent ne pas vous concerner. Si vous pensez avoir besoin de chaque kilo de performances (l'optimisation prématurée est la racine de tout mal!), Vous pouvez consulter les modifications apportées à PyDispatcher dans Django.

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:

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

Trellis Doc

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top