Если вы используете zeromq> = 3.0, вы можете установить опцию сокета RCVTIMEO:
client_receiver.RCVTIMEO = 1000 # in milliseconds
Но в целом вы можете использовать опросы:
poller = zmq.Poller()
poller.register(client_receiver, zmq.POLLIN) # POLLIN for recv, POLLOUT for send
И poller.poll()
занимает время ожидания:
evts = poller.poll(1000) # wait *up to* one second for a message to arrive.
evts
будет пустым списком, если нечего получать.
Вы можете опросить с помощью zmq.POLLOUT
, чтобы проверить, будет ли отправка успешной.
Или, для обработки случая однорангового узла, который мог потерпеть неудачу, a:
worker.send(msg, zmq.NOBLOCK)
может быть достаточно, который всегда будет возвращаться немедленно, вызывая ZMQError (zmq.EAGAIN), если отправка не может быть завершена.