没有项目描述
petal的Python项目详细描述
:芙蓉:花瓣瓶,用于gRPC服务
Petal减少了编写和维护基于GRPC的服务所需的样板文件,同时确保了您的服务 代码始终与定义同步。它旨在成为一个有点固执己见的gRPC框架。 这是非常非常早期的代码
安装和功能
pip install petal
现在:
- [X]将服务方法定义为简单的Python函数
- [X]通过使用类型注释,确保它们是服务定义的最新版本
- [x]构建您的proto定义,并使用
petal
命令运行您的应用程序 - [X]将编译后的protobuf定义共享为python包。
- [X]流式处理请求和响应
未来功能:
- []开发过程中自动下载
- []结构化日志记录
- []某种形式的插件架构
- []分布式跟踪
- []测试客户
- []异步支持
Hello World示例:
frompetalimportServicefromexample.protobuf.greeter_pb2importHelloReply,HelloRequestservice=Service(__name__)@service.grpc()defsay_hello(request:HelloRequest)->HelloReply:returnHelloReply(message=f'Hello {request.name}')
教程:创建花瓣应用程序
让我们创建一个Hello World花瓣应用程序。首先让我们定义一个完全无用的服务把文件放在下面
在hello_world/protobuf/service.proto
:
syntax="proto3";packagehello_world.protobuf.service;serviceHelloWorld{rpcSayHello(HelloRequest)returns(HelloReply){}}messageHelloRequest{}messageHelloReply{}
然后运行petal build hello_world
接下来,编写我们的服务定义创建
hello_world/__init__.py
文件并添加一些导入:
frompetalimportServicefromhello_world.protobuf.service_pb2importHelloReply,HelloRequestservice=Service(__name__)
这将导入我们的服务将需要的请求和响应类型。接下来我们需要填写
SayHello
方法:
@service.grpc()defsay_hello(request:HelloRequest)->HelloReply:returnHelloReply()
最后,通过执行petal run hello_world
来运行服务
现在,如果我们通过添加新方法来修改服务:
messageHelloAgain{}serviceHelloWorld{rpcSayHelloAgain(HelloRequest)returns(HelloAgain){}}
然后运行petal build hello_world && petal run hello_world
,我们得到一个错误:
$ petal run hello_world Error: Cannot find a suitable method for GRPC method SayHelloAgain Please ensure one exists in your service code, or use service.grpc(name=NAME) to define one.
petal确保我们为所有服务函数定义了正确的python方法。我们可以解决这个问题 定义一个:
fromhello_world.protobuf.service_pb2importHelloAgain@service.grpc()defsay_hello_again(request:HelloRequest)->HelloAgain:returnHelloAgain()
现在运行petal serve hello_world
就可以了