跳转到主要内容

ZeroMQ套接字集成到AsyncIO事件循环中

项目描述

鸢尾花是asyncio和ZeroMQ套接字之间的一种实验性替代集成。

我开始尝试使用aiozmq,但我反对其中的一些设计决策。我从该代码中借鉴了一些想法,但做了一些不同的事情

  1. aiozmq是围绕asyncio的协议和传输API构建的,我觉得很难使用;即使是最简单的示例也涉及到继承ZmqProtocol。鸢尾花使用一个单一的AsyncZMQSocket包装类,具有简单的语义。

  2. 鸢尾花不包含RPC框架。

  3. 鸢尾花期望用户使用PyZMQ创建和连接ZMQ套接字,然后将它们包装在AsyncZMQSocket对象中。

鸢尾花是一种花卉。Asyncio本身最初代号为“郁金香”,并形成了一种传统,即用花卉命名asyncio库。

使用此工具时请自担风险。PyZMQ的作者MinRK告诉我,我绝对不应该依赖ZMQ文件描述符进行事件循环,但我正是这样做的。

ping服务器示例

import asyncio, zmq, zantedeschia

ctx = zmq.Context()
s = ctx.socket(zmq.REP)
s.bind('tcp://127.0.0.1:8123')
async_sock = zantedeschia.AsyncZMQSocket(s)

def pong():
    while True:
        msg_parts = yield from async_sock.recv_multipart()
        yield from async_sock.send_multipart(msg_parts)

asyncio.get_event_loop().run_until_complete(pong())

使用on_recv API代替

import asyncio, zmq, zantedeschia

ctx = zmq.Context()
s = ctx.socket(zmq.REP)
s.bind('tcp://127.0.0.1:8123')
async_sock = zantedeschia.AsyncZMQSocket(s)

@async_sock.on_recv
def pong(msg_parts):
    async_sock.send_multipart(msg_parts)

asyncio.get_event_loop().run_forever()

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解有关安装包的更多信息。

源代码分发

Zantedeschia-0.1.tar.gz (4.0 kB 查看哈希值)

上传于 来源

由以下机构支持