我已经搜索了但我仍然不明白这条线的含义是什么。
为什么要在函数中加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()
答案 0 :(得分:1)
因为如果没有放任何值(或者在那里显式使用0
的值),Poller.poll()
方法必须无限期地等待配置的一组上的任何第一个事件这样的Poller
- 实例监控Socket
- 实例。
在这种情况下,Poller.poll()
- 方法的调用将阻止,直到出现任何此类事件(如果出现),概率为非零,不会事件一直到来。
这种情况会有效挂断你的应用程序无休止(并且完全无法控制你的代码内部)等待状态,这正是防止的原因强>并且避免进入这种状态 Poller.poll( aTimeoutInMILLISECONDs )
通过设置超时的方法来阻止这种情况。
答案 1 :(得分:0)
此处1000
是等待事件的超时(以毫秒为单位)。
答案 2 :(得分:0)
根据zmq.Poller的文档,poll()
方法的参数是以毫秒为单位的超时。当在已注册的套接字上注册事件时,它返回(socket, event)
形式的元组。在这种情况下,我们只在一个套接字上查找入站消息:poll.register(socket, zmq.POLLIN)
。
更多详情可在The Guide的匹配部分找到。