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

时间:2017-08-31 03:11:08

标签: python zeromq poller

我已经搜索了但我仍然不明白这条线的含义是什么。

为什么要在函数中加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()

3 个答案:

答案 0 :(得分:1)

为什么?

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

这意味着什么?

在这种情况下,Poller.poll() - 方法的调用将阻止,直到出现任何此类事件(如果出现),概率为非零,不会事件一直到来。

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

答案 1 :(得分:0)

此处1000是等待事件的超时(以毫秒为单位)。

See more here

答案 2 :(得分:0)

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

更多详情可在The Guide的匹配部分找到。