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

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

如何用Python搭建gRPC服務

瀏覽:8日期:2022-06-15 15:42:12
目錄一、概述二、安裝python需要的庫三、定義gRPC的接口四、使用 protoc 和相應的插件編譯生成對應語言的代碼五、編寫grpc的服務端代碼六、編寫gRPC客戶端的代碼七、調用測試八、gRPC的使用總結一、概述

一個gRPC服務的大體結構圖為:

如何用Python搭建gRPC服務

圖一表明,grpc的服務是跨語言的,但需要遵循相同的協議(proto)。相比于REST服務,gPRC 的一個很明顯的優勢是它使用了二進制編碼,所以它比 JSON/HTTP 更快,且有清晰的接口規范以及支持流式傳輸,但它的實現相比rest服務要稍微要復雜一些,下面簡單介紹搭建gRPC服務的步驟。

二、安裝python需要的庫

pip install grpcio

pip install grpcio-tools  

pip install protobuf

三、定義gRPC的接口

創建 gRPC 服務的第一步是在.proto 文件中定義好接口,proto是一個協議文件,客戶端和服務器的通信接口正是通過proto文件協定的,可以根據不同語言生成對應語言的代碼文件。這個協議文件主要就是定義好服務(service)接口,以及請求參數和相應結果的數據結構,下面是一個簡單的例子。

syntax = 'proto3';​option cc_generic_services = true;​//定義服務接口service GrpcService { rpc hello (HelloRequest) returns (HelloResponse) {} //一個服務中可以定義多個接口,也就是多個函數功能}​//請求的參數message HelloRequest { string data = 1; //數字1,2是參數的位置順序,并不是對參數賦值 Skill skill = 2; //支持自定義的數據格式,非常靈活};​//返回的對象message HelloResponse { string result = 1; map<string, int32> map_result = 2; //支持map數據格式,類似dict};​message Skill { string name = 1;};四、使用 protoc 和相應的插件編譯生成對應語言的代碼

python -m grpc_tools.protoc -I ./ --python_out=./ --grpc_python_out=. ./hello.proto

利用編譯工具把proto文件轉化成py文件,直接在當前文件目錄下運行上述代碼即可。

1.-I 指定proto所在目錄

2.-m 指定通過protoc生成py文件

3.--python_out指定生成py文件的輸出路徑

4.hello.proto 輸入的proto文件

執行上述命令后,生成hello_pb2.py 和hello_pb2_grpc.py這兩個文件。

五、編寫grpc的服務端代碼

#! /usr/bin/env python# coding=utf8​import timefrom concurrent import futures​import grpc​from gRPC_example import hello_pb2_grpc, hello_pb2​_ONE_DAY_IN_SECONDS = 60 * 60 * 24​​class TestService(hello_pb2_grpc.GrpcServiceServicer): ’’’ 繼承GrpcServiceServicer,實現hello方法 ’’’ def __init__(self):pass​ def hello(self, request, context):’’’具體實現hello的方法,并按照pb的返回對象構造HelloResponse返回:param request::param context::return:’’’result = request.data + request.skill.name + ' this is gprc test service'list_result = {'12': 1232}return hello_pb2.HelloResponse(result=str(result), map_result=list_result)​def run(): ’’’ 模擬服務啟動 :return: ’’’ server = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) hello_pb2_grpc.add_GrpcServiceServicer_to_server(TestService(),server) server.add_insecure_port(’[::]:50052’) server.start() print('start service...') try:while True: time.sleep(_ONE_DAY_IN_SECONDS) except KeyboardInterrupt:server.stop(0)​​if __name__ == ’__main__’: run()

在服務端側,需要實現hello的方法來滿足proto文件中GrpcService的接口需求,hello方法的傳入參數,是在proto文件中定義的HelloRequest,context是保留字段,不用管,返回參數則是在proto中定義的HelloResponse,服務啟動的代碼是標準的,可以根據需求修改提供服務的ip地址以及端口號。

六、編寫gRPC客戶端的代碼

#! /usr/bin/env python# coding=utf8​import grpc​from gRPC_example import #! /usr/bin/env python# coding=utf8​import grpc​from gRPC_example import hello_pb2_grpc, hello_pb2​​def run(): ’’’ 模擬請求服務方法信息 :return: ’’’ conn=grpc.insecure_channel(’localhost:50052’) client = hello_pb2_grpc.GrpcServiceStub(channel=conn) skill = hello_pb2.Skill(name='engineer') request = hello_pb2.HelloRequest(data='xiao gang', skill=skill) respnse = client.hello(request) print('received:',respnse.result)​​if __name__ == ’__main__’: run()​​def run(): ’’’ 模擬請求服務方法信息 :return: ’’’ conn=grpc.insecure_channel(’localhost:50052’) client = hello_pb2_grpc.GrpcServiceStub(channel=conn) skill = hello_pb2.Skill(name='engineer') request = hello_pb2.HelloRequest(data='xiao gang', skill=skill) response = client.hello(request) print('received:',response.result)​​if __name__ == ’__main__’: run()

客戶端側代碼的實現比較簡單,首先定義好訪問ip和端口號,然后定義好HelloRequest數據結構,遠程調用hello即可。需要強調的是,客戶端和服務端一定要import相同proto文件編譯生成的hello_pb2_grpc, hello_pb2模塊,即使服務端和客戶端使用的語言不一樣,這也是grpc接口規范一致的體現。

七、調用測試

先啟動運行服務端的代碼,再啟動運行客戶端的代碼即可。

八、gRPC的使用總結 定義好接口文檔 工具生成服務端/客戶端代碼 服務端補充業務代碼 客戶端建立 gRPC 連接后,使用自動生成的代碼調用函數 編譯、運行

以上就是如何用Python搭建gRPC服務的詳細內容,更多關于Python搭建gRPC服務的資料請關注好吧啦網其它相關文章!

標簽: Python 編程
相關文章:
主站蜘蛛池模板: 合肥抖音SEO网站优化-网站建设-网络推广营销公司-百度爱采购-安徽企匠科技 | 高硼硅玻璃|水位计玻璃板|光学三棱镜-邯郸奥维玻璃科技有限公司 高温高压釜(氢化反应釜)百科 | 商标转让-商标注册-商标查询-软著专利服务平台 - 赣江万网 | 有机肥设备生产制造厂家,BB掺混肥搅拌机、复合肥设备生产线,有机肥料全部加工设备多少钱,对辊挤压造粒机,有机肥造粒设备 -- 郑州程翔重工机械有限公司 | EDLC超级法拉电容器_LIC锂离子超级电容_超级电容模组_软包单体电容电池_轴向薄膜电力电容器_深圳佳名兴电容有限公司_JMX专注中高端品牌电容生产厂家 | 无线遥控更衣吊篮_IC卡更衣吊篮_电动更衣吊篮配件_煤矿更衣吊篮-力得电子 | 二手注塑机回收_旧注塑机回收_二手注塑机买卖 - 大鑫二手注塑机 二手光谱仪维修-德国OBLF光谱仪|进口斯派克光谱仪-热电ARL光谱仪-意大利GNR光谱仪-永晖检测 | 国际学校_国际学校哪个好_国际课程学校-国际学校择校网 | Win10系统下载_32位/64位系统/专业版/纯净版下载 | 成都网站建设制作_高端网站设计公司「做网站送优化推广」 | 智慧消防-消防物联网系统云平台 智能化的检漏仪_气密性测试仪_流量测试仪_流阻阻力测试仪_呼吸管快速检漏仪_连接器防水测试仪_车载镜头测试仪_奥图自动化科技 | 婚博会2024时间表_婚博会门票领取_婚博会地址-婚博会官网 | 电机铸铝配件_汽车压铸铝合金件_发动机压铸件_青岛颖圣赫机械有限公司 | 2025世界机器人大会_IC China_半导体展_集成电路博览会_智能制造展览网 | 无锡门窗-系统门窗-阳光房-封阳台-断桥铝门窗厂[窗致美] | ISO9001认证咨询_iso9001企业认证代理机构_14001|18001|16949|50430认证-艾世欧认证网 | 杭州成人高考_浙江省成人高考网上报名 | 便携式表面粗糙度仪-彩屏硬度计-分体式粗糙度仪-北京凯达科仪科技有限公司 | 激光内雕_led玻璃_发光玻璃_内雕玻璃_导光玻璃-石家庄明晨三维科技有限公司 激光内雕-内雕玻璃-发光玻璃 | 合肥角钢_合肥槽钢_安徽镀锌管厂家-昆瑟商贸有限公司 | 在线浊度仪_悬浮物污泥浓度计_超声波泥位计_污泥界面仪_泥水界面仪-无锡蓝拓仪表科技有限公司 | 自进式锚杆-自钻式中空注浆锚杆-洛阳恒诺锚固锚杆生产厂家 | 全屋整木定制-橱柜,家具定制-四川峨眉山龙马木业有限公司 | 挤奶设备过滤纸,牛奶过滤纸,挤奶机过滤袋-济南蓝贝尔工贸有限公司 | 筒瓦厂家-仿古瓦-寺庙-古建琉璃瓦-宜兴市古典园林建筑陶瓷厂有限公司 | 煤粉取样器-射油器-便携式等速飞灰取样器-连灵动 | 深圳美安可自动化设备有限公司,喷码机,定制喷码机,二维码喷码机,深圳喷码机,纸箱喷码机,东莞喷码机 UV喷码机,日期喷码机,鸡蛋喷码机,管芯喷码机,管内壁喷码机,喷码机厂家 | 数显恒温培养摇床-卧式/台式恒温培养摇床|朗越仪器 | 变位机,焊接变位机,焊接变位器,小型变位机,小型焊接变位机-济南上弘机电设备有限公司 | 临海涌泉蜜桔官网|涌泉蜜桔微商批发代理|涌泉蜜桔供应链|涌泉蜜桔一件代发 | 国产离子色谱仪,红外分光测油仪,自动烟尘烟气测试仪-青岛埃仑通用科技有限公司 | 金属切削液-脱水防锈油-电火花机油-抗磨液压油-深圳市雨辰宏业科技发展有限公司 | 电缆桥架生产厂家_槽式/梯式_热镀锌线槽_广东东莞雷正电气 | 螺纹三通快插接头-弯通快插接头-宁波舜驰气动科技有限公司 | 钢制拖链生产厂家-全封闭钢制拖链-能源钢铝拖链-工程塑料拖链-河北汉洋机械制造有限公司 | ERP企业管理系统永久免费版_在线ERP系统_OA办公_云版软件官网 | 福兰德PVC地板|PVC塑胶地板|PVC运动地板|PVC商用地板-中国弹性地板系统专业解决方案领先供应商! 福建成考网-福建成人高考网 | YT保温材料_YT无机保温砂浆_外墙保温材料_南阳银通节能建材高新技术开发有限公司 | 西点培训学校_法式西点培训班_西点师培训_西点蛋糕培训-广州烘趣西点烘焙培训学院 | 长城人品牌官网| 塑胶地板-商用PVC地板-pvc地板革-安耐宝pvc塑胶地板厂家 |