import zmq import time c=zmq.Context() publisher=c.socket(zmq.PUB) publisher.bind('ipc://testcase') subscriber1=c.socket(zmq.SUB) subscriber1.setsockopt(zmq.SUBSCRIBE, 'a') subscriber1.connect('ipc://testcase') subscriber2=c.socket(zmq.SUB) subscriber2.setsockopt(zmq.SUBSCRIBE, 'a') subscriber2.connect('ipc://testcase') print "waiting for sockets to setup" print "sleeping" time.sleep(0.1) print "done sleeping" publisher.send_multipart(['a','test123']) print "works fine here" print subscriber1.recv_multipart() print subscriber2.recv_multipart() print "sleeping" time.sleep(0.1) print "done sleeping" print "closing one socket" subscriber1.close() print "sleeping" time.sleep(0.1) print "done sleeping" print "sending another message on publisher" publisher.send_multipart(['a','test876']) print "sleeping" time.sleep(0.1) print "done sleeping" print "this should not hang, we should be able to receive that message on the other, unclosed socket" print subscriber2.recv_multipart() if not subscriber1.closed: subscriber1.close() if not subscriber2.closed: subscriber2.close()