没有项目描述

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就可以了

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java EclipseLink级联持久化异常   java Android Studio本地库模块问题   java更新值Netbeans   java从消息数组中返回一条消息   java Struts标记:一个jsp中有多个寻呼机   java如何访问hibernate。cfg。xml,config。属性和log4j。来自项目文件夹外部的属性   JavaSpringPetCare示例,控制器操作如何链接到jsp的?   java理解try&catch和错误处理   javascript如何将数据从动态表存储到数据库   使用JAVA比较不同格式的值   java如何在返回服务时设置下拉列表的默认值?   java将oracle十六进制字符串转换为实际字符串值   java jpa子图和MappedSuperclass抛出未知实体   用Java实现swing自定义Matlab按钮外观   随机掷骰的java百分比数学结果不正确   java创建了文件路径,但照片无法保存,我一直在抓拍   java如何确保要使用的端口始终可用(即未使用)?   xsd如何用java生成JAXBC类。util。可选择的   java更改JOptionPane中的按钮布局。showOptionDialog()