Что означает 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),

Более подробную информацию можно найти в соответствующем разделе Руководства.

Другие вопросы по тегам