zmq.Poller.poll( 1000 ) 是什么意思?

What is the meaning of zmq.Poller.poll( 1000 )?

我已经搜索过了,但我还是不明白这行是什么意思。

为什么要在函数中放1000?

full code is here

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()

这里1000是等待事件的超时时间,以毫秒为单位。

See more here.

根据 zmq.Poller 的文档,poll() 方法的参数是以毫秒为单位的超时。当在已注册套接字上注册事件时,它 returns 形式为 (socket, event) 的元组。在这种情况下,我们只在一个套接字上查找入站消息:poll.register(socket, zmq.POLLIN)

可以在 The Guide 的匹配部分找到更多详细信息。

为什么?

因为如果没有放置任何值(或者如果 0 的值将显式地使用在那里),Poller.poll() 方法将不得不无限等待已配置的任何第一个事件一组这样的 Poller-实例被监控 Socket-实例。

那是什么意思?

在这种情况下,调用 Poller.poll() 方法 将阻塞 ,直到出现任何此类事件(如果出现),并且非零概率,根本没有这样的事件发生。

这种情况会有效地挂起您的应用程序处于无休止的(并且完全无法从您的代码内部控制)等待状态,这是正是阻止和避免进入这种状态的原因Poller.poll( aTimeoutInMILLISECONDs )通过设置超时的方法来防止这种情况。