ZeroMQ:等待消息而不消耗线程

问题描述 投票:0回答:1

我有一些简单的python代码,等待主题消息。

但是...运行此程序时,python进程将占用CPU。我知道使用其他语言(例如套接字)时,有一种方法可以等待消息而不会消耗全部处理能力。本质上,线程只是保持暂停以等待响应。 ZeroMQ是否可能?

import zmq
import sys

port = "5556"
if len(sys.argv) > 1:
    port =  sys.argv[1]
    int(port)

# Socket to talk to server
context = zmq.Context()
socket = context.socket(zmq.SUB)

print "Collecting updates from weather server..."
socket.connect ("tcp://localhost:%s" % port)

# Subscribe to zipcode, default is NYC, 10001
topicfilter = "10001"
socket.setsockopt(zmq.SUBSCRIBE, topicfilter)

# Process 5 updates
total_value = 0
for update_nbr in range (5):
    string = socket.recv()
    topic, messagedata = string.split()
    total_value += int(messagedata)
    print ('{} {}'.format(topic, message)
python zeromq messaging
1个回答
0
投票

Q“ ZeroMQ可能吗?”

上面的代码不是所主张问题的可再现MCVE / MWE表示。

首先:代码显式地阻塞。使用.recv()方法会阻塞,直到任何新的匹配消息到达为止(如果有的话)。

不会使CPU过载。它只是一直坐在SUB端等待,直到第一个此类消息(如果有)到达。


如果一个人从未使用过ZeroMQ,在这里可以先研究一下"ZeroMQ - Principles in less than Five Seconds",然后再探讨更多细节


[如果对更好的方案感兴趣,请不要以这种方式使用.recv()-方法,而应使用POSACK-方法检测任何此类.poll()-确认并读取POSACK -ed的情况使用.recv( zmq.NOBLOCK )-方法。

© www.soinside.com 2019 - 2024. All rights reserved.