traducir inglés ingles español cómo como python publish-subscribe

python - ingles - cómo se dice en inglés



Módulo recomendado de publicación/suscripción/despacho de Python? (7)

De PyPubSub :

Pypubsub proporciona una manera simple para que su aplicación Python desacople sus componentes: partes de su aplicación pueden publicar mensajes (con o sin datos) y otras partes pueden suscribirse / recibirlos. Esto permite que los "remitentes" de mensajes y los "oyentes" de mensajes no se conozcan entre sí:

  • uno no necesita importar el otro
  • un remitente no necesita saber
    • "quién" recibe los mensajes,
    • qué harán los oyentes con los datos,
    • o incluso si cualquier oyente obtendrá los datos del mensaje.
  • de manera similar, los oyentes no necesitan preocuparse acerca de dónde provienen los mensajes.

Esta es una gran herramienta para implementar una arquitectura Modelo-Vista-Controlador o cualquier arquitectura similar que promueva el desacoplamiento de sus componentes.

Parece que hay bastantes módulos de Python para publicar / suscribirse flotando en la web, desde PyPubSub, PyDispatcher hasta simples clases "caseras".

¿Existen ventajas y desventajas específicas al comparar diferentes módulos diferentes? ¿Qué conjuntos de módulos se han comparado y comparado?

Gracias por adelantado


Recientemente analicé cuidadosamente py-amqplib para actuar como un cliente de AMQP para un agente de RabbitMQ. La última herramienta está escrita en Erlang.

Si está buscando desacoplar su aplicación. entonces ¿por qué unirlo al lenguaje en sí? Considere usar colas de mensajes que son neutras en cuanto al idioma y ¡entonces realmente tiene espacio para crecer!

Dicho esto, AMQP se esfuerza por comprender y puede ser más de lo que está dispuesto a asumir si su aplicación. está funcionando bien tal como está. YMMV.


PyDispatcher se usa mucho en Django y funciona perfectamente para mí (y para toda la comunidad de Django, supongo).

Como recuerdo, hay algunos problemas de rendimiento:

  • La verificación de argumentos hecha por PyDispatcher es lenta.
  • Las conexiones no utilizadas tienen una sobrecarga innecesaria.

AFAIK es muy poco probable que se encuentre con este problema en una aplicación de tamaño pequeño a mediano. Entonces estos problemas pueden no preocuparte. Si crees que necesitas cada libra de rendimiento (¡la optimización prematura es la raíz de todo mal!), Puedes ver las modificaciones hechas a PyDispatcher en Django.

Espero que esto ayude.


También están las bibliotecas de PJ Eby, RuleDispatch y el proyecto PEAK, especialmente Trellis. No sé cuál es su estado en realidad, pero la lista de correo está bastante activa.

Última versión de Trellis en PyPi

Trellis doc

También utilicé los componentes del proyecto Kamaelia de la BBC. Axon es un enfoque interesante, pero inspirado en más componentes que editores-consumidores. Bueno, su sitio web no está actualizado en absoluto ... Hubo un proyecto o 2 en el Google SoC 2008 y se está trabajando.

No sé si ayuda :)

Editar: Acabo de encontrar Py-notify, que es una implementación "poco ortodoxa" del patrón Observer. Tiene la mayoría de las funcionalidades que necesito para mis propias herramientas.


El solo hecho de que PyPubSub parece ser un proyecto manejado de manera caótica (el Wiki en SF está muerto, el sitio web (otro Wiki) que está vinculado a SF está actualmente roto) sería razón suficiente para que yo no lo use. PyDispatcher tiene un sitio web intacto, pero la única documentación que parecen proporcionar es la de la API generada a partir de las cadenas de documentos. No hay tráfico en la lista de correo tampoco ... ¡una mala señal!

Como Mike también mencionó, es perfectamente posible elegir una solución que sea independiente de Python. Ahora no me malinterprete, me encanta Python, pero aún así, en este campo puede tener sentido utilizar un marco que está desacoplado del lenguaje de programación.

No tengo experiencia con los mensajes, pero estoy planeando echarle un vistazo a algunas soluciones. Hasta el momento, estos dos (proyectos gratuitos, de código abierto) parecen ser los más prometedores para mí (casualmente, ambos son proyectos Apache):

Ambos parecen ser proyectos razonablemente maduros, al menos en cuanto a documentación y comunidad. No puedo comentar sobre la calidad del software, sin embargo, como dije, no utilicé ningún software.

Qpid se envía con las bibliotecas cliente para Python, pero también puede usar py-amqplib . Para ActiveMQ hay pyactivemq , que puede usar para conectarse a través de STOMP (Protocolo de mensajería orientado por texto en flujo continuo) oa través de Openwire.


El mejor paquete de envío para Python parece ser el módulo de envío dentro de django (llamadas señales en la documentación). Es independiente del resto de django, y es corto, documentado, probado y muy bien escrito.

Editar: Hice este proyecto en un proyecto de señal independiente para Python.


Aquí hay uno más nuevo: https://github.com/shaunduncan/smokesignal . " smokesignal es una biblioteca de Python simple para enviar y recibir señales. Se inspira un poco en el marco de señal de django, pero se entiende como una variante de propósito general " .

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()


Algunas bibliotecas que he encontrado que aún no se han mencionado: