异步纯python grpc客户机和服务器实现,支持asyncio、uvloop、curio和trio
purerpc的Python项目详细描述
purerpc
异步纯python grpc客户端和服务器实现支持 asyncio, uvloop, curio和 trio(通过anyio兼容层实现)。
要求
- cpython=3.5
- Pypy=3.5
安装
最新的PYPI版本:
pip install purerpc
最新开发版本:
pip install git+https://github.com/standy66/purerpc.git
默认情况下purerpc使用异步事件循环,如果您想使用uvloop、curio或trio,请手动安装它们。
protoc插件
purerpc将protoc-gen-purerpc
的protoc
插件添加到PATH
环境变量中
因此,您可以使用它生成服务定义和存根:
protoc --purerpc_out=. --python_out=. -I. greeter.proto
或者,如果您安装了grpcio_tools
python包:
python -m grpc_tools.protoc --purerpc_out=. --python_out=. -I. greeter.proto
用法
注意:greeter_grpc
模块是由purerpc的protoc-gen-purerpc
插件生成的。
下面是Python3.6及更高版本的示例,其中引入了异步生成器作为语言概念。
对于不支持本机异步生成器的python 3.5,可以为此使用async_generator库。
只需用@async_generator
decorator标记产生协同程序,并使用await yield_(value)
和await yield_from_(async_iterable)
而不是yield
。
服务器
fromgreeter_pb2importHelloRequest,HelloReplyfromgreeter_grpcimportGreeterServicerfrompurerpcimportServerclassGreeter(GreeterServicer):asyncdefSayHello(self,message):returnHelloReply(message="Hello, "+message.name)asyncdefSayHelloToMany(self,input_messages):asyncformessageininput_messages:yieldHelloReply(message=f"Hello, {message.name}")server=Server(50055)server.add_service(Greeter().service)server.serve(backend="asyncio")# backend can also be one of: "uvloop", "curio", "trio"
客户
importanyioimportpurerpcfromgreeter_pb2importHelloRequest,HelloReplyfromgreeter_grpcimportGreeterStubasyncdefgen():foriinrange(5):yieldHelloRequest(name=str(i))asyncdefmain():asyncwithpurerpc.insecure_channel("localhost",50055)aschannel:stub=GreeterStub(channel)reply=awaitstub.SayHello(HelloRequest(name="World"))print(reply.message)asyncforreplyinstub.SayHelloToMany(gen()):print(reply.message)if__name__=="__main__":anyio.run(main,backend="asyncio")# backend can also be one of: "uvloop", "curio", "trio"
您可以混合使用服务器和客户端代码,例如,让一个服务器使用purerpc从另一个grpc服务器请求某些内容,等等。
misc/
文件夹中的更多示例
Release 0.5.2(2019-07-23)
功能
- 异步的附加异常屏蔽(3cbd35c)
Release 0.5.1(2019-07-23)
错误修复
- python 3.5上的异步生成器(1c19229)
Release 0.5.0(2019-07-23)
功能
- 现在可以通过contextmngr或setup/teardown来添加服务(208dd95)
Release 0.4.1(2019-07-22)
功能
- 删除任何IO(6de2c9a)中未经记录使用原始套接字的情况
Release 0.4.0(2019-07-22)
错误修复
- 速度提高(1cb3d46)
功能
- 将状态属性添加到grpcstream(0019d8c)
- 应答ping帧(c829901)
- 将最大并发流从1000更改为65536(d2d461f)
- 分离h2和grpclib逻辑(1f4e6b0)
- 支持百分比编码的GRPC消息头(c6636f4)
- 将默认最大消息长度更改为32 MB
Release 0.3.2(2019-02-15)
错误修复
- 修复依赖项,删除一些anyio monkey补丁(ac6c5c2)
Release 0.3.1(2019-02-15)
错误修复
- 修复purerpc.test实用程序中的酸洗错误。wrappedresult(9f0a63d)
Release 0.3.0(2019-02-14)
功能
破坏性变化
- purerpc.test_utils.purerpctestcase被删除
Release 0.2.0(2019-02-10)
功能
破坏性变化
- 服务器和测试现在默认使用异步事件循环, 可以使用purerpc_backend环境变量更改此行为
- purerpc.channel被移除,迁移到 purerpc.unsecure_channel异步上下文管理器(现在支持正确的 关机)
版本0.1.6
- 允许在请求参数中将请求头传递给方法处理程序
- 允许将自定义元数据传递给方法存根调用(在元数据中,可选关键字参数)
释放0.1.5
- 强制执行,以便保持小超时
- 在purerpc api中公开purerpctestcase,用于单元测试purerpc服务
版本0.1.4
- 加速protoc插件
0.1.3版[仅限PYPI]
- 修复pypi上的长描述
版本0.1.2
- 在Python3.7上修复单元测试
版本0.1.0
- 执行立即模式
释放0.0.1
- 初始版本