我正在尝试在python中实现以下场景。需要帮助才能得到类似实现的任何好例子。
---------
Module 1
---------
Module 2
---------
Module 3
---------
我想开发一个带有Google协议缓冲区的Python框架,以便消息可以通过module1传递到module2到module3,反之亦然。
我创建了协议消息文件。我在module2中创建了一个线程,我在其中创建了zmq套接字。
现在我想在python中添加类似于zloop的东西,在那里我可以监听来自模块1或3的消息,然后传递它。
任何指针都将不胜感激。
答案 0 :(得分:0)
pyzmq不是像czmq那样实现自己的事件循环,而是在zmq.eventloop.ioloop
中集成tornado ioloop。
一个简单的示例,在incoming
上转发和记录任何消息,并在outgoing
上不加修改地发送相同的消息:
import zmq
from zmq.eventloop import ioloop, zmqstream
loop = ioloop.IOLoop.instance()
ctx = zmq.Context()
incoming = ctx.socket(zmq.PULL)
incoming.bind('tcp://127.0.0.1:5555')
outgoing = ctx.socket(zmq.PUSH)
outgoing.bind('tcp://127.0.0.1:5556')
sincoming = zmqstream.ZMQStream(incoming, loop)
soutgoing = zmqstream.ZMQStream(outgoing, loop)
def relay(msg):
print("relaying %s" % "|".join('%r' % part for part in msg))
soutgoing.send_multipart(msg)
sincoming.on_recv(relay)
loop.start()
整个事情的关键是stream.on_recv
方法,它允许您注册一个回调,以便在消息到达套接字时运行。