这是我参考user938949的答案和http://taotetek.wordpress.com/2011/02/02/python-multiprocessing-with-zeromq/之后进行的快速修改。如果您做得更好,请发表您的答案,我会推荐您的答案。
对于那些想要持久的可靠性解决方案的人,请参见http://zguide.zeromq.org/page:all#toc64
zeromq(beta ATM)的3.0版支持ZMQ_RCVTIMEO和ZMQ_SNDTIMEO中的超时。http://api.zeromq.org/3-0:zmq-setsockopt
服务器
zmq.NOBLOCK确保当客户端不存在时,send()不会阻塞。
import time
import zmq
context = zmq.Context()
ventilator_send = context.socket(zmq.PUSH)
ventilator_send.bind("tcp://127.0.0.1:5557")
i=0
while True:
i=i+1
time.sleep(0.5)
print ">>sending message ",i
try:
ventilator_send.send(repr(i),zmq.NOBLOCK)
print " succeed"
except:
print " failed"
客户
轮询对象可以在许多recieving插座听(见“Python的多处理ZeroMQ”之上。联系我联系只在work_receiver。在无限循环,客户端投票与1000毫秒的时间间隔,袜子对象返回空,如果没有当时已收到该消息。
import time
import zmq
context = zmq.Context()
work_receiver = context.socket(zmq.PULL)
work_receiver.connect("tcp://127.0.0.1:5557")
poller = zmq.Poller()
poller.register(work_receiver, zmq.POLLIN)
while True:
socks = dict(poller.poll(1000))
if socks:
if socks.get(work_receiver) == zmq.POLLIN:
print "got message ",work_receiver.recv(zmq.NOBLOCK)
else:
print "error: message timeout"