Python zmq.Poller.poll(1000)的含义是什么?
我已经搜索过了,但我还是不明白这句话的意思 为什么要在函数中输入1000Python zmq.Poller.poll(1000)的含义是什么?,python,zeromq,poller,Python,Zeromq,Poller,我已经搜索过了,但我还是不明白这句话的意思 为什么要在函数中输入1000 此处1000是等待事件的超时(以毫秒为单位) .根据的文档,poll()方法的参数是以毫秒为单位的超时。在已注册的套接字上注册事件时,它返回形式为(套接字,事件)的元组。在本例中,我们只在一个套接字上查找入站消息:poll.register(socket,zmq.POLLIN) 更多详细信息可在的匹配部分找到。为什么? 因为如果没有输入任何值(或者如果在那里显式使用0),则Poller.poll()方法必须无限期地等待已
此处
1000
是等待事件的超时(以毫秒为单位)
.根据的文档,
poll()
方法的参数是以毫秒为单位的超时。在已注册的套接字上注册事件时,它返回形式为(套接字,事件)
的元组。在本例中,我们只在一个套接字上查找入站消息:poll.register(socket,zmq.POLLIN)
更多详细信息可在的匹配部分找到。为什么?
因为如果没有输入任何值(或者如果在那里显式使用0
),则Poller.poll()
方法必须无限期地等待已配置的Poller
-实例监控套接字
-实例集上的任何第一个事件
那是什么意思?
在这种情况下,Poller.poll()
-method的调用将阻止,直到任何此类事件以非零概率出现(如果出现),即根本没有此类事件出现
这种情况将有效地挂起您的应用程序,使其处于无休止(并且完全无法从代码内部控制)的等待状态,这正是阻止并避免进入这种状态的原因通过设置超时来防止这种情况发生。你能解释一下dict(poll.poll(1000))的意思吗?好吧,详细的答案就在上面,
Poller
实例(称为有点神秘地混淆了poll
(与方法同名.poll()
)使用out-most函数dict()
将返回的值重新打包到python字典中。poll.poll(atimeoutinms)
的内部行为使用了超时机制,以避免在出现这种情况时无限挂起,例如poll.register(…)
-ed套接字不传递轮询器等待的任何事件。此处不欢迎阻塞,因此超时设置为~1000[ms]因此,代码肯定会继续感谢您的帮助。我现在明白了。
很高兴它起到了帮助作用。StackOverflow社区使用点击向上投票作为一种方式,表示一篇文章被认为是有用和/或有趣的,所以请毫不犹豫地向上投票,以表明您在上面写了什么。
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()