Что означает zmq.Poller.poll( 1000)?
Я уже искал, но я все еще не понимаю, что означает эта строка.
Зачем ставить 1000 в функцию?
class ClientTask(threading.Thread):
"""ClientTask"""
def __init__(self, id):
self.id = id
threading.Thread.__init__ (self)
def run(self):
context = zmq.Context()
socket = context.socket(zmq.DEALER)
identity = u'worker-%d' % self.id
socket.identity = identity.encode('ascii')
socket.connect('tcp://localhost:5570')
print('Client %s started' % (identity))
poll = zmq.Poller()
poll.register(socket, zmq.POLLIN)
reqs = 0
while True:
reqs = reqs + 1
print('Req #%d sent..' % (reqs))
socket.send_string(u'request #%d' % (reqs))
for i in range(5):
sockets = dict(poll.poll(1000))//HERE
if socket in sockets:
msg = socket.recv()
tprint('Client %s received: %s' % (identity, msg))
socket.close()
context.term()
3 ответа
Вот 1000
время ожидания в миллисекундах для ожидания события.
Зачем?
Потому что, если не было поставлено какое-либо значение (или если значение 0
будет явно использоваться там), Poller.poll()
метод должен был бы бесконечно ждать любого первого события на настроенном наборе таких Poller
-экземпляр контролируется Socket
-instances.
Что бы это значило?
В таком случае вызов Poller.poll()
-метод будет блокироваться до тех пор, пока не появится любое такое событие (если оно появится), с ненулевой вероятностью того, что такое событие вообще никогда не наступит.
В этом случае ваше приложение будет эффективно зависать в бесконечном (и абсолютно неуправляемом изнутри вашего кода) состоянии ожидания, что как раз и является причиной предотвращения и предотвращения перехода в такое состояние. Poller.poll( aTimeoutInMILLISECONDs )
предотвращает это с помощью самого метода установки тайм-аута.
Согласно документации для zmq.Poller, аргумент для poll()
Метод - это время ожидания в миллисекундах. Возвращает кортежи вида (socket, event)
когда зарегистрированы события на зарегистрированных сокетах. В этом случае мы ищем только входящие сообщения в одном сокете: poll.register(socket, zmq.POLLIN)
,
Более подробную информацию можно найти в соответствующем разделе Руководства.