【发布时间】:2014-03-23 00:45:34
【问题描述】:
我创建了一个单独运行的zmq_forwarder.py,它将消息从应用程序传递到 sockJS 连接,我目前正在研究烧瓶应用程序如何通过 zmq 从 sockJS 接收消息。我正在粘贴我的zmq_forwarder.py 的内容。我是 ZMQ 新手,我不知道为什么每次运行它时,它都会占用 100% 的 CPU 负载。
import zmq
# Prepare our context and sockets
context = zmq.Context()
receiver_from_server = context.socket(zmq.PULL)
receiver_from_server.bind("tcp://*:5561")
forwarder_to_server = context.socket(zmq.PUSH)
forwarder_to_server.bind("tcp://*:5562")
receiver_from_websocket = context.socket(zmq.PULL)
receiver_from_websocket.bind("tcp://*:5563")
forwarder_to_websocket = context.socket(zmq.PUSH)
forwarder_to_websocket.bind("tcp://*:5564")
# Process messages from both sockets
# We prioritize traffic from the server
while True:
# forward messages from the server
while True:
try:
message = receiver_from_server.recv(zmq.DONTWAIT)
except zmq.Again:
break
print "Received from server: ", message
forwarder_to_websocket.send_string(message)
# forward messages from the websocket
while True:
try:
message = receiver_from_websocket.recv(zmq.DONTWAIT)
except zmq.Again:
break
print "Received from websocket: ", message
forwarder_to_server.send_string(message)
如您所见,我设置了 4 个套接字。该应用程序连接到端口 5561 以将数据推送到 zmq,并连接到端口 5562 以从 zmq 接收(尽管我仍在弄清楚如何实际设置它以侦听 zmq 发送的消息)。另一方面,sockjs 在 5564 端口从 zmq 接收数据,并在 5563 端口向它发送数据。
我已阅读 zmq.DONTWAIT 使接收消息异步且非阻塞,因此我添加了它。
有没有办法改进代码,以免 CPU 过载?目标是能够使用 zmq 在烧瓶应用程序和 websocket 之间传递消息。
【问题讨论】:
标签: python flask zeromq sockjs pyzmq