我的编程空间,编程开发者的网络收藏夹
学习永远不晚

怎么用Python编写简单的gRPC服务

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

怎么用Python编写简单的gRPC服务

这篇文章主要介绍了怎么用Python编写简单的gRPC服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器连接到后端服务。

用Python编写简单的gRPC服务

grpc官网python参考:https://www.grpc.io/docs/languages/python/quickstart/
http://grpc.github.io/grpc/python/grpc.html

  • Python 3.5 or higher

  • pip version 9.0.1 or higher

安装gRPC相关的库
grpcio-tools主要用根据我们的protocol buffer定义来生成Python代码,官方解释是Protobuf code generator for gRPC。

#apt install python3-pippip install grpciopip install protobufpip install grpcio_tools

编写proto文件

proto是一个协议文件,客户端和服务器的通信接口正是通过proto文件协定的,可以根据不同语言生成对应语言的代码文件。

heartbeat.proto文件:

syntax = "proto3";message HeartbeatRequest{string Host      = 1;int32  Mem       = 2;int32  Disk      = 3;int32  Cpu       = 4;int64  Timestamp = 5;int64  Seq       = 6;}message HeartbeatResponse{int32  ErrCode   = 1;string ErrMsg    = 2;}

heartbeat_service.proto

syntax = "proto3";import "heartbeat.proto";// HeartBeatServiceservice HeartBeatService{    rpc HeartBeat(HeartbeatRequest) returns(HeartbeatResponse){}}

核心 就是一个 用于生成需要用到数据类型的文件;一个就是用于生成相关调用方法的类。 一个定义数据类型,一个用于定义方法。

通过proto生成.py文件

proto文件需要通过protoc生成对应的.py文件。protoc的下载地址 。下载解压之后,将解压目录添加到path的环境变量中。

pip install grpcioinstall grpcio-tools#pip  install --upgrade protobuf

注意:【下面命令是在proto文件所在的目录执行的,-I 用来指定proto的目录是 . 】

python -m grpc_tools.protoc -I=. --python_out=.. heartbeat.protopython -m grpc_tools.protoc -I=. --grpc_python_out=.. heartbeat_service.proto
  • -I 指定proto所在目录

  • -m 指定通过protoc生成py文件

  • –python_out生成py文件的输出路径

  • heartbeat.proto、heartbeat_service.proto为 输入的proto文件

  • 生成的文件名中 xxx_pb2.py 就是我们刚才创建数据结构文件,里面有定义函数参数和返回数据结构; xxx_pb2_grpc.py 就是我们定义的函数,定义了我们客服端rpc将来要调用方法。

编译客户端和服务端代码

服务端

#!/usr/bin/env python# coding=utf-8import sysfrom concurrent import futuresimport timeimport grpcfrom google.protobuf.json_format import MessageToJsonimport heartbeat_service_pb2_grpcimport heartbeat_pb2from lib.core.log import LOGGERclass HeartBeatSrv(heartbeat_service_pb2_grpc.HeartBeatServiceServicer):    def HeartBeat(self, msg, context):        try:            # LOGGER.info(MessageToJson(msg, preserving_proto_field_name=True))            body = MessageToJson(msg, preserving_proto_field_name=True)            LOGGER.info("Get Heartbeat Request: %s", body)            response = heartbeat_pb2.HeartbeatResponse()            response.ErrCode = 0000            response.ErrMsg = "success"            return response        except Exception as e:            print("exception in heartbeat")            LOGGER.error("RPC Service exception: %s", e)            response = heartbeat_pb2.HeartbeatResponse()            response.ErrCode = 500            response.ErrMsg = "rpc error: %s" % e            return responsedef server(host, rpc_port):    # 这里通过thread pool来并发处理server的任务    # 定义服务器并设置最大连接数,concurrent.futures是一个并发库,类似于线程池的概念    grpc_server = grpc.server(futures.ThreadPoolExecutor(max_workers=100))    # 不使用SSL    grpc_server.add_insecure_port('[::]' + ':' + str(rpc_port))    # This method is only safe to call before the server is started.    #  绑定处理器HeartBeatSrv(自己实现了处理函数)    heartbeat_service_pb2_grpc.add_HeartBeatServiceServicer_to_server(HeartBeatSrv(), grpc_server)    # 该方法只能调用一次, start() 不会阻塞    # 启动服务器    grpc_server.start()    LOGGER.info("server start...")    while 1:        time.sleep(10)    #grpc_server.wait_for_termination()def main():    try:        LOGGER.info("begin start server")        rpc_port = 8090        host = "::"        server(host, rpc_port)    except Exception as e:        LOGGER.error("server start error: %s", e)        time.sleep(5)if __name__ == '__main__':    LOGGER.info(sys.path)    main()

客户端

from time import sleepimport grpcimport heartbeat_pb2import heartbeat_service_pb2_grpcfrom lib.core.log import LOGGERdef run(seq):    option = [('grpc.keepalive_timeout_ms', 10000)]    #    with grpc.insecure_channel(target='127.0.0.1:8090', options=option) as channel:        # 客户端实例        stub = heartbeat_service_pb2_grpc.HeartBeatServiceStub(channel)        # stub调用服务端方法        response = stub.HeartBeat(heartbeat_pb2.HeartbeatRequest(Host='hello grpc', Seq=seq), timeout=10)        LOGGER.info("response ErrCode:%s", response.ErrCode)if __name__ == '__main__':    for i in range(1, 10000):        LOGGER.info("i: %s", i)        sleep(3)        run(i)

感谢你能够认真阅读完这篇文章,希望小编分享的“怎么用Python编写简单的gRPC服务”这篇文章对大家有帮助,同时也希望大家多多支持编程网,关注编程网行业资讯频道,更多相关知识等着你来学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

怎么用Python编写简单的gRPC服务

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

怎么用Python编写简单的gRPC服务

这篇文章主要介绍了怎么用Python编写简单的gRPC服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以
2023-06-20

用Python编写简单的gRPC服务的详细过程

gRPC 是可以在任何环境中运行的现代开源高性能 RPC 框架。它可以通过可插拔的支持来有效地连接数据中心内和跨数据中心的服务,以实现负载平衡,跟踪,运行状况检查和身份验证。它也适用于分布式计算的最后一英里,以将设备,移动应用程序和浏览器连
2022-06-02

怎么用Python编写一个简单的游戏

本篇内容介绍了“怎么用Python编写一个简单的游戏”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!在这个系列中,我们要用不同的编程语言编写相
2023-06-15

用Python编写一个简单的Http S

原文地址:Write a simple HTTP server in Python http://www.acmesystems.it/python_httpd 例子中源码: https://github.com/tanzilli/play
2023-01-31

用Python编写简单的微博爬虫

先说点题外话,我一开始想使用Sina Weibo API来获取微博内容,但后来发现新浪微博的API限制实在太多,大家感受一下:只能获取当前授权的用户(就是自己),而且只能返回最新的5条,WTF! 所以果断放弃掉这条路,改为『生爬』,因为PC
2022-06-04

基于Python编写一个简单的http服务器

这篇文章主要为大家详细介绍了如何基于Python编写一个简单的http服务器,文中的示例代码简洁易懂,感兴趣的小伙伴可以跟随小编一起学习一下
2023-05-17

基于C++怎么编写一个简单的服务器

这篇文章主要讲解了“基于C++怎么编写一个简单的服务器”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“基于C++怎么编写一个简单的服务器”吧!先写个简易的controller基类继承反射基类,
2023-07-05

HTML怎么编写一个简单的表单

这篇文章主要介绍了HTML怎么编写一个简单的表单,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。我们先来看下常用的表单元素有哪些: 文本域 文本域通过
2023-06-27

linux怎么用at命令编写简单的计划任务

本篇内容介绍了“linux怎么用at命令编写简单的计划任务”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!如果想在linux下计划在将来的某个
2023-06-13

python简单程序的编写方法是什么

这篇文章主要介绍“python简单程序的编写方法是什么”,在日常操作中,相信很多人在python简单程序的编写方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python简单程序的编写方法是什么”的疑
2023-06-17

基于Python编写一个简单的服务注册发现服务器

我们都知道有很多的非常著名的注册服务器,例如: Consul、ZooKeeper、etcd,甚至借助于redis完成服务注册发现。但是本篇文章我们将使用python socket写一个非常简单的服务注册发现服务器,感兴趣的可以了解一下
2023-05-16

Java简单的SOAP客户端怎么编写

编写Java简单的SOAP客户端可以通过以下步骤进行:1. 导入必要的类和包。首先,需要导入`javax.xml.soap`包和相关的类。例如:```javaimport javax.xml.soap.*;```2. 创建SOAP连接。使用
2023-09-27

基于C++编写一个简单的服务器

这篇文章主要为大家详细介绍了如何基于C++编写一个简单的服务器,文中的示例代码讲解详细,具有一定的参考价值,感兴趣的小伙伴可以了解一下
2023-03-14

利用Python编写一个简单的缓存系统

今天来做一个最简单的例子,利用写一个最简单的缓存系统,以key``value的方式保持数据,并且需要将内容中的数据落地到文件,以便下次启动的时候,将文件的内容加载进内存中来,感兴趣的可以了解一下
2023-05-16

怎么使用Python搭建gRPC服务

这篇文章主要介绍了怎么使用Python搭建gRPC服务,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。一、概述一个gRPC服务的大体结构图为:图一表明,grpc的服务是跨语言的
2023-06-20

怎么使用Python编写一个简单的垃圾邮件分类器

这篇文章主要介绍“怎么使用Python编写一个简单的垃圾邮件分类器”,在日常操作中,相信很多人在怎么使用Python编写一个简单的垃圾邮件分类器问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么使用Pytho
2023-07-06

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录