2011-03-04 13 views
28

Django y Flask hacen uso de señales; esta última usa la biblioteca Blinker. En el contexto de Python, Blinker y la biblioteca Python pubsub, ¿cómo se comparan las señales y pubsub? ¿Cuándo usaría uno u otro?Python: ¿cómo se diferencian las señales de pubsub?

+0

Estoy buscando una respuesta definitiva de alguien que ha estado en este camino como "Son lo mismo" o "PubSub generalmente implica X mientras que las señales generalmente significan Y." –

Respuesta

14

Blinker docs y PubSub docs.

Por lo que respecta a Blinker y PubSub ir, son lo mismo. La diferencia está en cómo lo hacen:

Con Blinker cuando se suscribe a una señal, usted da el nombre de la señal, y cuando activa la señal, pasa el objeto activador.

Con PubSub cuando se suscribe a un oyente, usted da el nombre (igual que Blinker), pero cuando notifica al oyente, pasa los datos directamente como argumentos de palabra clave. Debido al método de argumento de palabra clave para pasar datos, es posible tener muchas más verificaciones de seguridad usando PubSub.

Personalmente, me gustaría ir con Signals, ya que coincide con mi forma de pensar mejor, pero PubSub ciertamente tiene un lugar también.

+2

¡Premio Nigromante! :) –

+0

Sobre el enlace de la url de PubSub está muerto; Prueba: http://pubsub.sourceforge.net/ – DevPlayer

+0

@DevPlayer: Gracias, actualicé mi enlace. –

4

Esto podría aclarar exactamente cómo PubSub se refiere a las señales: http://pubsub.sourceforge.net/apidocs/concepts.html

PubSub facilita el desacoplamiento de los componentes (callables, módulos, paquetes) dentro de una aplicación. Esto se logra mediante:

  • partes Permitir de la aplicación para enviar mensajes a “el resto de la aplicación” sin tener que saber
    • si serán manejados los mensajes:
      • quizás el el mensaje se ignorará por completo,
      • o será manejado por muchas partes diferentes de la aplicación;
    • cómo se manejarán los mensajes:
      • lo que se hará con el mensaje y su contenido;
      • en qué orden se enviará un mensaje determinado al resto de la aplicación;
  • partes Permitir de la aplicación para recibir y manejar los mensajes de “el resto de la aplicación” sin tener que saber quién envió los mensajes.

Un oyente es "una parte de la aplicación que desea recibir mensajes". Un oyente se suscribe a uno o más temas. Un remitente es cualquier parte de la aplicación que solicita a Pubsub que envíe un mensaje de un tema determinado. El remitente proporciona datos, si los hay. Pubsub enviará el mensaje, incluidos los datos, a todos los oyentes sobre el tema del mensaje.

+3

¿No se aplican todas estas cosas a las señales y los receptores también? – matthewwithanm

Cuestiones relacionadas