#!/usr/bin/env python import traceback import sys import zmq from time import sleep print "Creating the zmq.Context" context = zmq.Context() print "Binding the publisher to the local socket at port 5557" sender = context.socket(zmq.PUB) sender.bind("tcp://*:5557") print "Binding the subscriber to the local socket at port 5557" receiver = context.socket(zmq.SUB) receiver.connect("tcp://*:5557") print "Setting the subscriber option to get only those originating from \"B\"" receiver.setsockopt(zmq.SUBSCRIBE, "B") print "Waiting a second for the socket to be created." sleep(1) print "Sending messages" for i in range(1,10): msg = "msg %d" % (i) env = None if i % 2 == 0: env = ["B", msg] else: env = ["A", msg] print "Sending Message: ", env sender.send_multipart(env) print "Closing the sender." sender.close() failed_attempts = 0 while failed_attempts < 3: try: print str(receiver.recv_multipart(zmq.NOBLOCK)) except: print traceback.format_exception(*sys.exc_info()) failed_attempts += 1 print "Closing the receiver." receiver.close() print "Terminating the context." context.term() """ Output: Creating the zmq.Context Binding the publisher to the local socket at port 5557 Binding the subscriber to the local socket at port 5557 Setting the subscriber option to get only those originating from "B" Waiting a second for the socket to be created. Sending messages Sending Message: ['A', 'msg 1'] Sending Message: ['B', 'msg 2'] Sending Message: ['A', 'msg 3'] Sending Message: ['B', 'msg 4'] Sending Message: ['A', 'msg 5'] Sending Message: ['B', 'msg 6'] Sending Message: ['A', 'msg 7'] Sending Message: ['B', 'msg 8'] Sending Message: ['A', 'msg 9'] Closing the sender. ['B', 'msg 2'] ['B', 'msg 4'] ['B', 'msg 6'] ['B', 'msg 8'] ['Traceback (most recent call last):\n', ' File "./test.py", line 43, in \n print str(receiver.recv_multipart(zmq.NOBLOCK))\n', ' File "socket.pyx", line 611, in zmq.core.socket.Socket.recv_multipart (zmq/core/socket.c:5181)\n', ' File "socket.pyx", line 514, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4811)\n', ' File "socket.pyx", line 548, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4673)\n', ' File "socket.pyx", line 99, in zmq.core.socket._recv_copy (zmq/core/socket.c:1344)\n', 'ZMQError: Resource temporarily unavailable\n'] ['Traceback (most recent call last):\n', ' File "./test.py", line 43, in \n print str(receiver.recv_multipart(zmq.NOBLOCK))\n', ' File "socket.pyx", line 611, in zmq.core.socket.Socket.recv_multipart (zmq/core/socket.c:5181)\n', ' File "socket.pyx", line 514, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4811)\n', ' File "socket.pyx", line 548, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4673)\n', ' File "socket.pyx", line 99, in zmq.core.socket._recv_copy (zmq/core/socket.c:1344)\n', 'ZMQError: Resource temporarily unavailable\n'] ['Traceback (most recent call last):\n', ' File "./test.py", line 43, in \n print str(receiver.recv_multipart(zmq.NOBLOCK))\n', ' File "socket.pyx", line 611, in zmq.core.socket.Socket.recv_multipart (zmq/core/socket.c:5181)\n', ' File "socket.pyx", line 514, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4811)\n', ' File "socket.pyx", line 548, in zmq.core.socket.Socket.recv (zmq/core/socket.c:4673)\n', ' File "socket.pyx", line 99, in zmq.core.socket._recv_copy (zmq/core/socket.c:1344)\n', 'ZMQError: Resource temporarily unavailable\n'] Closing the receiver. Terminating the context. """