1

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

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

3 回答 3

1

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

在这里查看更多

于 2017-08-31T03:21:57.003 回答
1

为什么?

因为如果没有放置任何值(或者如果在0那里显式使用 的值),则该Poller.poll()方法将不得不无限等待配置的一组此类Poller-instance 监控的Socket-instances 上的任何第一个事件。

那意味着什么?

在这种情况下,调用一个Poller.poll()-method将阻塞,直到任何这样的事件出现(如果它出现),以非零概率,根本没有这样的事件到达。

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

于 2017-08-31T10:43:04.580 回答
0

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

更多详细信息可以在指南的匹配部分中找到。

于 2017-08-31T08:30:37.477 回答