电脑知识|欧美黑人一区二区三区|软件|欧美黑人一级爽快片淫片高清|系统|欧美黑人狂野猛交老妇|数据库|服务器|编程开发|网络运营|知识问答|技术教程文章 - 好吧啦网

您的位置:首頁技術文章
文章詳情頁

用Python編寫簡單的gRPC服務的詳細過程

瀏覽:21日期:2022-06-15 14:18:47

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文件

用Python編寫簡單的gRPC服務的詳細過程

生成的文件名中 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 responseexcept 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 = 8090host = '::'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通信參考URL: https://zhuanlan.zhihu.com/p/363810793python grpc搭構服務https://www.jianshu.com/p/10d9ca034567python grpc 服務端和客戶端調用demo參考URL: https://blog.csdn.net/qq_42363032/article/details/115282405

到此這篇關于用Python編寫簡單的gRPC服務的文章就介紹到這了,更多相關Python gRPC服務內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 雾度仪_雾度计_透光率雾度仪价格-三恩时(3nh)光电雾度仪厂家 | 雄松华章(广州华章MBA)官网-专注MBA/MPA/MPAcc/MEM辅导培训 | 河南橡胶接头厂家,河南波纹补偿器厂家,河南可曲挠橡胶软连接,河南套筒补偿器厂家-河南正大阀门 | 基本型顶空进样器-全自动热脱附解吸仪价格-AutoHS全模式-成都科林分析技术有限公司 | 净化车间_洁净厂房_净化公司_净化厂房_无尘室工程_洁净工程装修|改造|施工-深圳净化公司 | 岩棉切条机厂家_玻璃棉裁条机_水泥基保温板设备-廊坊鹏恒机械 | 青州开防盗门锁-配汽车芯片钥匙-保险箱钥匙-吉祥修锁店 | 北京企业宣传片拍摄_公司宣传片制作-广告短视频制作_北京宣传片拍摄公司 | 洁净实验室工程-成都手术室净化-无尘车间装修-四川华锐净化公司-洁净室专业厂家 | 衬氟旋塞阀-卡套旋塞阀-中升阀门首页 | 深圳办公室装修-写字楼装修设计-深圳标榜装饰公司 | 塑料熔指仪-塑料熔融指数仪-熔体流动速率试验机-广东宏拓仪器科技有限公司 | 航空铝型材,7系铝型材挤压,硬质阳*氧化-余润铝制品 | 艺术漆十大品牌_艺术涂料加盟代理_蒙太奇艺术涂料厂家品牌|艺术漆|微水泥|硅藻泥|乳胶漆 | 信阳网站建设专家-信阳时代网联-【信阳网站建设百度推广优质服务提供商】信阳网站建设|信阳网络公司|信阳网络营销推广 | 对辊式破碎机-对辊制砂机-双辊-双齿辊破碎机-巩义市裕顺机械制造有限公司 | 无线讲解器-导游讲解器-自助讲解器-分区讲解系统 品牌生产厂家[鹰米讲解-合肥市徽马信息科技有限公司] | 南京和瑞包装有限公司| 橡胶接头_橡胶软接头_套管伸缩器_管道伸缩器厂家-巩义市远大供水材料有限公司 | 万濠投影仪_瑞士TRIMOS高度仪_尼康投影仪V12BDC|量子仪器 | 马尔表面粗糙度仪-MAHR-T500Hommel-Mitutoyo粗糙度仪-笃挚仪器 | 计算机毕业设计源码网| 首页 - 张店继勇软件开发工作室 兰州UPS电源,兰州山特UPS-兰州万胜商贸 | 冷藏车-东风吸污车-纯电动环卫车-污水净化车-应急特勤保障车-程力专汽厂家-程力专用汽车股份有限公司销售二十一分公司 | 纳米涂料品牌 防雾抗污纳米陶瓷涂料厂家_虹瓷科技 | 【星耀裂变】_企微SCRM_任务宝_视频号分销裂变_企业微信裂变增长_私域流量_裂变营销 | 硬齿面减速机[型号全],ZQ减速机-淄博久增机械 | TPU薄膜_TPU薄膜生产厂家_TPU热熔胶膜厂家定制_鑫亘环保科技(深圳)有限公司 | 应急灯_消防应急灯_应急照明灯_应急灯厂家-大成智慧官网 | 流变仪-热分析联用仪-热膨胀仪厂家-耐驰科学仪器商贸 | 合肥仿石砖_合肥pc砖厂家_合肥PC仿石砖_安徽旭坤建材有限公司 | 重庆中专|职高|技校招生-重庆中专招生网 | 冷油器-冷油器换管改造-连云港灵动列管式冷油器生产厂家 | 丽陂特官网_手机信号屏蔽器_Wifi信号干扰器厂家_学校考场工厂会议室屏蔽仪 | 大流量卧式砂磨机_强力分散机_双行星双动力混合机_同心双轴搅拌机-莱州市龙跃化工机械有限公司 | 爆炸冲击传感器-无线遥测传感器-航天星百科 | 浙江华锤电器有限公司_地磅称重设备_防作弊地磅_浙江地磅售后维修_无人值守扫码过磅系统_浙江源头地磅厂家_浙江工厂直营地磅 | 玉米深加工机械,玉米加工设备,玉米加工机械等玉米深加工设备制造商-河南成立粮油机械有限公司 | 云南丰泰挖掘机修理厂-挖掘机维修,翻新,再制造的大型企业-云南丰泰工程机械维修有限公司 | 压接机|高精度压接机|手动压接机|昆明可耐特科技有限公司[官网] 胶泥瓷砖胶,轻质粉刷石膏,嵌缝石膏厂家,腻子粉批发,永康家德兴,永康市家德兴建材厂 | 沈阳庭院景观设计_私家花园_别墅庭院设计_阳台楼顶花园设计施工公司-【沈阳现代时园艺景观工程有限公司】 |