[zeromq-dev] espresso pattern in zeromq not working

Karthik Sharma karthik.sharma at gmail.com
Sun Sep 14 00:27:51 CEST 2014


I am trying to get familiar with zeromq.In the tutorial there is a program
called espresso.py.The code for that program is given below.

    # Espresso Pattern
    # This shows how to capture data using a pub-sub proxy
    #

    import time

    from random import randint
    from string import uppercase
    from threading import Thread

    import zmq
    from zmq.devices import monitored_queue

    from zhelpers import zpipe

    # The subscriber thread requests messages starting with
    # A and B, then reads and counts incoming messages.

    def subscriber_thread():
        print('started subscriber thread')
        ctx = zmq.Context.instance()

        # Subscribe to "A" and "B"
        subscriber = ctx.socket(zmq.SUB)
        subscriber.connect("tcp://localhost:6001")
        subscriber.setsockopt(zmq.SUBSCRIBE, b"A")
        subscriber.setsockopt(zmq.SUBSCRIBE, b"B")

        count = 0
        while True:
            try:
                msg = subscriber.recv_multipart()
            except zmq.ZMQError as e:
                if e.errno == zmq.ETERM:
                    break           # Interrupted
                else:
                    raise
            count += 1

        print ("Subscriber received %d messages" % count)


    # .split publisher thread
    # The publisher sends random messages starting with A-J:

    def publisher_thread():
        print('started publisher thread')
        ctx = zmq.Context.instance()

        publisher = ctx.socket(zmq.PUB)
        publisher.bind("tcp://*:6000")

        while True:
            string = "%s-%05d" % (uppercase[randint(0,10)],
randint(0,100000))
            try:
                publisher.send(string)
            except zmq.ZMQError as e:
                if e.errno == zmq.ETERM:
                    break           # Interrupted
                else:
                    raise
            time.sleep(0.1)         # Wait for 1/10th second


    # .split listener thread
    # The listener receives all messages flowing through the proxy, on its
    # pipe. Here, the pipe is a pair of ZMQ_PAIR sockets that connects
    # attached child threads via inproc. In other languages your mileage
may vary:

    def listener_thread (pipe):
        print('started listener thread')
        # Print everything that arrives on pipe
        while True:
            try:
                print (pipe.recv_multipart())
            except zmq.ZMQError as e:
                if e.errno == zmq.ETERM:
                    break           # Interrupted


    # .split main thread
    # The main task starts the subscriber and publisher, and then sets
    # itself up as a listening proxy. The listener runs as a child thread:

    def main ():

        # Start child threads
        ctx = zmq.Context.instance()
        p_thread = Thread(target=publisher_thread)
        s_thread = Thread(target=subscriber_thread)
        p_thread.start()
        s_thread.start()

        pipe = zpipe(ctx)

        subscriber = ctx.socket(zmq.XSUB)
        subscriber.connect("tcp://localhost:6000")

        publisher = ctx.socket(zmq.XPUB)
        publisher.bind("tcp://*:6001")

        l_thread = Thread(target=listener_thread, args=(pipe[1],))
        l_thread.start()

        try:
            monitored_queue(subscriber, publisher, pipe[0], 'pub', 'sub')
        except KeyboardInterrupt:
            print ("Interrupted")

        del subscriber, publisher, pipe
        ctx.term()

    if __name__ == '__main__':
        main()

If I try to run the above program as from my Linux terminal (Ubuntu 12.04)
as

`$ python espresso.py`

I get the following error.

    started publisher thread
    started subscriber thread
    started listener thread

If I do a `Ctrl + C` I get

    ^CInterrupted
    Subscriber received 0 messages

My questions are as follows.

    1) Why don't I see any messages.
    2) Is there some bug in the program?
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.zeromq.org/pipermail/zeromq-dev/attachments/20140914/8eae040e/attachment.htm>


More information about the zeromq-dev mailing list