[Python-es] Multiple Publishers python-zmq y un solo subscriber, usando IPC

Chema Cortes pych3m4 en gmail.com
Mar Abr 16 11:33:36 CEST 2013


El día 12 de abril de 2013 21:06, Christian Espinoza
<chespinoza en gmail.com> escribió:
> Hola a todos, tengo una duda con zmq...
>
> Tengo un servicio que está publicando datos mediante el modelo ipc de zmq
>
>                 context = zmq.Context()
>                 publisher = context.socket(zmq.PUB)
>                 publisher.connect("ipc://VCserver")
>                 myjson = json.dumps(worker.data)
>                 publisher.send(myjson)
>
> y otro servicio(subscriber) que revisa los datos para generar ciertas alertas...
>
>                context = zmq.Context()
>                subscriber = context.socket(zmq.SUB)
>                subscriber.bind("ipc://VCserver")
>                subscriber.setsockopt(zmq.SUBSCRIBE, '')
>                while True:
>                    response = subscriber.recv()
>                    if response:
>                    data = json.loads(response)
>                    check(data)
>
> Ahora debo implementar múltiples instancias publishers y
> no tengo bien claro si se podrá usando un solo subscriber o deberé implementar
> las instancias cada una, pareada con su propio subscriber, como la comunicación
> se realiza a través de un archivo especial, me queda la duda.
> Las instancias Publisher toman distintos tipos de datos, por lo que no
> son siempre iguales
> pero el subscriber siempre realiza las mismas tareas, como conectarse
> a una bd e
> insertar datos.

Con el esquema PUB-SUB puedes tener varios subscriptores emparejados a
un único publicador. Si vas a tener un número variable de
publicadores, establecer emparejamientos dinámicos puede resultar
bastante costoso en recursos. La solución óptima pasa por crear un
intermediario "estático" usando el esquema XPUB-XSUB. En la
documentación te lo explica bastante bien:

  http://zguide.zeromq.org/py:all#header-39

En tu caso concreto, sólo vas a tener un subscriptor del intermediario.


--
Hyperreals *R: http://ch3m4.org/blog
Quarks, bits y otras criaturas infinitesimales


Más información sobre la lista de distribución Python-es