Pregunta

De PyPubSub:

PypubSub proporciona una forma simple para que su aplicación de Python desacople sus componentes:Partes de su aplicación pueden publicar mensajes (con o sin datos) y otras partes pueden suscribirlos/recibirlos.Esto permite que los "remitentes" y los "oyentes" de mensajes no sean conscientes del otro:

  • 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 algún oyente obtendrá los datos del mensaje.
  • De manera similar, los oyentes no necesitan preocuparse por el origen de los mensajes.

Esta es una gran herramienta para implementar una arquitectura de controlador de visión modelo 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 hasta PyDispatcher hasta clases sencillas "caseras".

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

gracias de antemano

¿Fue útil?

Solución

PyDispatcher se utiliza mucho en Django y está funcionando perfectamente para mí (y para toda la comunidad Django, supongo).

Según recuerdo, hay algunos problemas de rendimiento:

  • La verificación de argumentos realizada por PyDispatcher es lenta.
  • Las conexiones no utilizadas tienen gastos generales innecesarios.

AFAIK, es muy poco probable que se encuentre con estos problemas en una aplicación de tamaño pequeño a mediano.Por lo tanto, es posible que estos problemas no le preocupen.Si cree que necesita cada gramo de rendimiento (¡la optimización prematura es la raíz de todos los males!), puede consultar las modificaciones realizadas a PyDispatcher en Django.

Espero que esto ayude.

Otros consejos

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

Editar: Bifurqué este proyecto en un proyecto de señal independiente para pitón.

Recientemente miré atentamente py-amqplib actuar como cliente AMQP para un corredor RabbitMQ.La última herramienta está escrita en Erlang.

Si está buscando desacoplar su aplicación.Entonces ¿por qué acoplarlo al lenguaje mismo?Considere usar colas de mensajes que sean neutrales en cuanto al idioma y entonces realmente tendrá espacio para crecer.

Dicho esto, AMQP requiere un esfuerzo para comprenderlo y puede ser más de lo que usted está dispuesto a asumir en su aplicación.está funcionando bien tal como está.YMMV.

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 en cierta medida en el marco de señales de Django, pero pretende ser una variante de propósito general." Ejemplo:

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 encontré que aún no se han mencionado:

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

Documento enrejado

También he utilizado los componentes del Proyecto Kamaelia de la BBC.Axon es un enfoque interesante, pero más componente que inspirado por el editor y el consumidor.Bueno, su sitio web está algo desactualizado...Hubo uno o dos proyectos en Google SoC 2008 y se está trabajando.

No sé si ayudará :)

Editar :Acabo de encontrar py-notificar 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 parezca ser un proyecto administrado de manera un tanto caótica (el Wiki en SF está muerto, el sitio web (otro Wiki) que está vinculado en SF actualmente no funciona) sería razón suficiente para no usarlo.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.Tampoco hay tráfico en la lista de correo...¡mala señal!

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

No tengo experiencia con la mensajería, pero planeo echar un vistazo a algunas soluciones.Hasta ahora, estos dos proyectos (gratuitos y de código abierto) me parecen los más prometedores (casualmente, ambos son proyectos de Apache):

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

Qpid viene con bibliotecas cliente para Python, pero también puedes usar py-amqplib.Para ActiveMQ hay pyactivemq, que puede utilizar para conectarse mediante STOMP (Protocolo de mensajería orientada a texto en streaming) o mediante Openwire.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top