与异步事件循环集成的ZeroMQ套接字
Zantedeschia的Python项目详细描述
Zantedeschia是Asyncio和 零MQ套接字。
我开始尝试使用aiozmq,但是 反对一些设计决定。我从代码中借鉴了一些想法,但是 做了一些不同的事情:
- aiozmq是围绕Asyncio的协议和传输API构建的,我 很难使用;即使是最简单的例子也涉及到子类化 ZmqProtocol。Zantedeschia使用一个AsynczmqSocket包装类, 简单的语义。
- zantedeschia不包含rpc框架。
- zantedeschia希望用户使用pyzmq创建和连接zmq套接字, 然后将它们包装在asynczmqsocket对象中。
zantedeschia是一个花属。asyncio本身最初的代号是 “郁金香”,以及以花命名异步库的传统。
用这个你自己承担风险。Pyzmq的作者Minrk告诉我 不应该依赖zmq文件描述符进行事件循环,但我正在 正是这样。
ping服务器示例:
importasyncio,zmq,zantedeschiactx=zmq.Context()s=ctx.socket(zmq.REP)s.bind('tcp://127.0.0.1:8123')async_sock=zantedeschia.AsyncZMQSocket(s)defpong():whileTrue:msg_parts=yield fromasync_sock.recv_multipart()yield fromasync_sock.send_multipart(msg_parts)asyncio.get_event_loop().run_until_complete(pong())
改用on_recvapi:
importasyncio,zmq,zantedeschiactx=zmq.Context()s=ctx.socket(zmq.REP)s.bind('tcp://127.0.0.1:8123')async_sock=zantedeschia.AsyncZMQSocket(s)@async_sock.on_recvdefpong(msg_parts):async_sock.send_multipart(msg_parts)asyncio.get_event_loop().run_forever()