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

标签 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()

最佳答案

为什么?

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

这意味着什么?

在这种情况下,对 Poller.poll() 方法的调用将被阻止,直到出现任何此类事件(如果出现),并且非- 零概率,根本没有这样的事件发生。

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

关于python - zmq.Poller.poll( 1000 ) 是什么意思?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45972607/

相关文章:

python - 按特定数字进行浮点精度比较

python - 我试图在 Python 3.4 中不让变量再次请求输入

python - github如何计算项目代码中语言的比例?

c# - 如何将数据从 C# 推送到 ZeroMQ 并从 Node.JS 拉取数据,反之亦然?

python - 试图了解 zeromq 高水位线行为

java - ZeroMQ Java 安装问题

go - 通过将空结构传递到 channel Go 来停止循环

Spring Integration FTP - 轮询而不传输?

python - 用于分段的正则表达式 - 将单词拆分为语素或词缀

java - 将 Spring Integration 中的轮询器配置为队列