248 votes

Système d’événements de Python

Quel système d’événement pour Python utilisez-vous ? Je suis déjà au courant des pydispatcher, mais je me demandais quoi d’autre peut être trouvé ou est couramment utilisé ?

Je ne suis pas intéressé par les gestionnaires d’événements qui font partie des grands cadres, je préfère utiliser une solution de petites rudimentaire que je peux étendre facilement.

283voto

florisla Points 956

La farandole des différents systèmes à événements qui sont mentionnés dans les réponses ici:

La plupart de style de base de système d'événements est le "sac de méthodes de gestionnaire", qui est une simple application du pattern observer. Fondamentalement, les méthodes de gestionnaire d' (callables) sont stockées dans un tableau et chacune est appelée lorsque l'événement "feux".

  • zope.l'événement montre le squelette de la façon dont cela fonctionne (voir Lennart réponse). Remarque: cet exemple n'a même pas le soutien gestionnaire d'arguments.
  • LongPoke "callable liste" la mise en œuvre montre qu'un tel événement système peut être mis en œuvre très minimalistically subclassing list
  • spassig de EventHook (Michael Foord de l'Événement Pattern) est une mise en œuvre directe.
  • Josip est Évalué les Leçons des Événements de la classe de base est le même, mais utilise un set() au lieu d'une liste pour stocker le sac, et implémente __call__ qui sont à la fois raisonnable ajouts.
  • PyNotify concept est similaire et fournit également d'autres notions de variables et de modalités (variable changé événement").
  • axel est en fait un sac de gestionnaires avec plus de fonctionnalités liées à l'enfilage, erreur de manipulation, ...

L'inconvénient de ces systèmes est que vous ne pouvez enregistrer les gestionnaires sur l'Événement réel de l'objet (ou les gestionnaires de la liste). Ainsi, au moment de l'enregistrement de l'événement a déjà besoin d'exister.

C'est pourquoi le deuxième style de systèmes à événements: la publication-souscription modèle. Ici, les gestionnaires ne vous inscrivez pas sur un objet événement (ou gestionnaire de liste), mais sur un répartiteur central. Aussi les auteurs de la notification de parler à l'expéditeur. Ce qu'il faut écouter, ou de quoi publier est déterminée par "signal", qui n'est rien de plus qu'un nom (chaîne de caractères).

  • PyPubSub , à première vue, semble être assez simple; apparemment ne supporte pas encore Python3
  • PyDispatcher semble souligner la flexibilité en ce qui concerne plusieurs-à-plusieurs publications etc.
  • (et Qt sur les signaux et les slots sont disponibles à partir de PyQt ou PySide)

115voto

J’ai fais ça :

Cependant, comme avec tout ce que j’ai vu, il y a aucun pydoc généré automatiquement pour cela et aucune signature, qui suce vraiment.

74voto

spassig Points 661

Nous utilisons un EventHook comme le suggère de Michael Foord dans son Modèle d’événement:

Il suffit d’ajouter EventHooks à vos classes avec :

Nous avons ajouter la fonctionnalité pour supprimer tous les auditeur d’un objet de classe de Michaels et fini avec cela :

23voto

Lennart Regebro Points 52510

J’utilise zope.event. C’est la plus simple expression que vous pouvez l’imaginer. :-) En fait, voici le code source complet :

Notez que vous ne pouvez pas envoyer des messages entre processus, par exemple. Il n’est pas un système de messagerie, juste un système d’événement, rien de plus, rien de moins.

17voto

Josip Points 1913

J’ai trouvé ce petit script sur les Précieux enseignements. Elle semble avoir juste le ratio de bonne simplicité/puissance que je suis après. Peter Thatcher est l’auteur du code suivant (aucune autorisation n’est mentionné).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X