我已经搜索过了,但我还是不明白这行代码的含义。
为什么要在函数中放入 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
值),则 Poller.poll()
方法将必须等待对于一组已配置的此类 Poller
实例监控的 Socket
实例上的任何第一个事件,无限期地进行。
这意味着什么?
在这种情况下,对 Poller.poll()
方法的调用将被阻止,直到出现任何此类事件(如果出现),并且非- 零概率,根本没有这样的事件发生。
这种情况会有效地挂起您的应用程序处于无休止的(并且从代码内部完全无法控制的)等待状态,这正是阻止的原因 并避免进入这种状态,Poller.poll( aTimeoutInMILLISECONDs )
通过设置超时的方法来防止这种情况。
关于python - zmq.Poller.poll( 1000 ) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972607/