python 使用gRPC

Python gRPC

概述:

gRPC 是谷歌开源的一个rpc(远程程序调用)框架,可以轻松实现跨语言,跨平台编程,其采用gRPC协议(基于HTTP2)。

  • rpc:

    remote procedure call, 翻译过来就是是远程程序调用。具体来说,就是客户端c1需要调用服务器s1上的某个方法(函数),得到相应的返回值并传递给c1。

  • gRPC协议

    要说gRPC协议需要先了解HTTP2, 虽然HTTP1.X 协议至今仍是主流协议,但是随着我们对性能要求越来越高,和web规模的不断扩大,HTTP2就应运而生。

    在这里,我们只需要知道其性能是高于现有的HTTP1就好了,感兴趣的朋友可以深入了解HTTP2。

使用原因

在上家公司,因为之前的项目有一下几个痛点,所以决定采用rpc框架:

  1. 项目的app,网站,m站,小程序等是独立项目, 一处改,处处改,效率低下
  2. 所有模块在一个项目里面,维护起来需要熟悉所有业务流程,维护难度加大
  3. 扩展性不强,应付高一点的并发需要将项目所有东西复制到新加服务器,运行所有模块,包括并发量不高的模块,造成资源浪费

所以我们花了点时间处理这些问题,将订单,用户等模块拆开,方便独立部署,独立升级,独立维护,这样可以大大提高维护效率和项目的伸缩性。

使用方法

  • 准备.proto文件
  syntax = "proto3";
  package order;
  message OrderRequest {// 定义请求数据
      string phone = 1;
      string price = 2;
      map<string, string> request_arg = 3;//便于字段扩展
  }

 message JSONResponse{// 定义返回格式
     string rst_string = 1; //统一返回json字符串作处理
     }

  service OrderHandler {
    // format a list of events.
    rpc create_order (OrderRequest) returns (JSONResponse) {}
 }
// 其中:
// message: 定义数据结构<br>
// service: 定义接口的名字,参数,
  • 生成所需文件(服务器和客户端均需要)
python -m grpc_tools.protoc -I./ --python_out=./ --grpc_python_out=./ ./*.proto

运行后会生成两个文件(test_pb2.py, test_pb2_grpc.py)

  • 编写server端代码
import time
import test_pb2
import test_pb2_grpc
import grpc

def test(request):
    # 实际调用到的函数
    json_response = test_pb2.JSONResponse()
    json_response.rst_string = json.dumps({"ret":"Hi gRPC"})# 构造出proto文件中定义的返回值格式
    return json_response

 class OrderHandler(test_pb2_grpc.OrderHandlerServicer):
    ‘‘‘
    gRPC请求会进入这个类中进行分发,根据客户端请求的方法找到对应的处理方法
    感兴趣的可以打断点查看request, context中的内容,他们包含了请求的所有信息
    ‘‘‘

     def create_order(self, request, context):
         return test(request, context)

 def serve():
     # 开启gRPC服务,监听特定端口,
     server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
     test_pb2_grpc.add_OrderHandlerServicer_to_server(
                                            OrderHandler(), server)
     server.add_insecure_port(‘[::]:{}‘.format(12006))
     server.start()
     try:
         while True:
             time.sleep(186400)
     except KeyboardInterrupt:
         server.stop(0)
serve()
  • 编写客户端代码进行 测试 client.py
 import grpc
 import test_pb2_grpc
 import test_pb2

 channel = grpc.insecure_channel("127.0.0.1:12006")
 stub = test_pb2_grpc.OrderHandlerStub(channel)
 # 要完成请求需要先构造出proto文件中定义的请求格式
 ret = stub.create_order(test_pb2.OrderRequest(phone="12990", price="50"))

 print(ret.rst_string)

原文地址:https://www.cnblogs.com/yuzhenjie/p/9387677.html

时间: 2024-10-09 22:53:17

python 使用gRPC的相关文章

python使用grpc,并打包成python模块

xmlrpc依然是可行的方案一.环境python3.6 二.安装模块 pip3 install grpcio pip3 install protobuf pip3 install grpcio-tools 三.准备grpc配置文件grpcdatabase.proto目录结构:内容如下: syntax = "proto3"; package grpcServer; service Greeter { rpc GetSummary (Request) returns (Return) {}

grpc| python 实战 grpc【h】

title: grpc| python 实战 grpc description: 只要代码可以跑起来, 很多难题都会迎刃而解. so, keep coding and stay hungry. 之前用 swoole 写 server 时就接触过 protobuf, 本来以为基于 protobuf 的 grpc, 上手起来会轻轻松松, 没想到结结实实的折腾了许久, 从 php 开始配置 grpc 需要的环境, 到无奈转到 grpc 最亲和 的 go 语言, 又无奈面对各种 go get 撞墙, 直

python的gRPC示例

参考URL: https://segmentfault.com/a/1190000015220713?utm_source=channel-hottest gRPC 是一个高性能.开源和通用的 RPC 框架,面向移动和 HTTP/2 设计.目前提供 C.Java 和 Go 语言版本,分别是:grpc, grpc-java, grpc-go. 其中 C 版本支持 C, C++, Node.js, Python, Ruby, Objective-C, PHP 和 C# 支持. gRPC 基于 HTT

python grpc 应用

1.rpc介绍 2.grpc 3.基于grpc协议文件传输 4.基于grpc协议jmeter压测获取实时结果 5.基于grcp协议获取jmeter最终压测报告,并将报告保存至client端 6.压测中途停止jmeter grpc server (jmeter server)  192.168.18.128 rpc client (本机) 1.rpc协议介绍 RPC(Remote Procedure Call Protocol)--远程过程调用协议,它是一种通过网络从远程计算机程序上请求服务,而不

Google 高性能 RPC 框架 gRPC 1.0.0 发布(附精彩评论)

gRPC是一个高性能.开源.通用的RPC框架,面向移动和HTTP/2设计,是由谷歌发布的首款基于Protocol Buffers的RPC框架. gRPC基于HTTP/2标准设计,带来诸如双向流.流控.头部压缩.单TCP连接上的多复用请求等特性.这些特性使得其在移动设备上表现更好,更省电且节省空间占用. gRPC 1.0版本是2015年面世以后的第一次版本发布,开发者可以把该版本用于生产.API现在也是很稳定的. 关于Java版本发布情况,大家阅读发布日志:https://github.com/g

gRPC helloworld service, RESTful JSON API gateway and swagger UI

概述 本篇博文完整讲述了如果通过 protocol buffers 定义并启动一个 gRPC 服务,然后在 gRPC 服务上提供一个 RESTful JSON API 的反向代理 gateway,最后通过 swagger ui 来提供 RESTful JSON API 的说明,完整代码 helloworld_restful_swagger. Helloworld gRPC Service 参考 gRPC Quick Start for Python. Install gRPC 安装 gRPC 运

gRPC入坑记

概要 由于gRPC主要是谷歌开发的,由于一些已知的原因,gRPC跑demo还是不那么顺利的.单独写这一篇,主要是gRPC安装过程中的坑太多了,记录下来让大家少走弯路. 主要的坑: 如果使用PHP.Python开发gRPC的客户端,需要编译gRPC命令行工具,生成proto的代码生成插件,否则proto里定义的service无法编译出来.编译需要使用GCC4.8级以上版本,否则报不支持C++11.然后需要龟速下周grpc源码,并下载一大堆第三方依赖.这个过程非常痛苦.使用golang.java的可

性能提升 25 倍:Rust 有望取代 C 和 C++,成为机器学习首选 Python 后端

https://www.infoq.cn/article/dgKDBiPl7KID0dyaE7Wl 在机器学习开发领域,如果我们纵观全局,撇除所有微小的细节,那么就可以提炼出机器学习开发中的两大不变步骤:模型训练和预测(或推断).如今,机器学习的首选语言是Python(除非你的工作环境有一些不寻常的约束才会有所不同),而这篇文章会带你走过一段新的旅程.希望当你看到最后会发现,使用 Rust 作为训练后端和部署平台的主意并不像听起来那样疯狂或令人困惑(除了标题提到的性能提升外,这种做法的好处其实还

学习笔记TF022:产品环境模型部署、Docker镜像、Bazel工作区、导出模型、服务器、客户端

产品环境模型部署,创建简单Web APP,用户上传图像,运行Inception模型,实现图像自动分类. 搭建TensorFlow服务开发环境.安装Docker,https://docs.docker.com/engine/installation/ .用配置文件在本地创建Docker镜像,docker build --pull -t $USER/tensorflow-serving-devel https://raw.githubusercontent.com/tensorflow/servin