新聞中心
這篇文章主要介紹Python怎么搭建gRPC服務(wù),文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
專注于為中小企業(yè)提供成都網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)紅古免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了千余家企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
1、安裝python所需的庫。
pip install grpcio pip install grpcio-tools pip install protobuf
2、定義gRPC接口。
syntax = "proto3"; option cc_generic_services = true; //定義服務(wù)接口 service GrpcService { rpc hello (HelloRequest) returns (HelloResponse) {} //一個(gè)服務(wù)中可以定義多個(gè)接口,也就是多個(gè)函數(shù)功能 } //請(qǐng)求的參數(shù) message HelloRequest { string data = 1; //數(shù)字1,2是參數(shù)的位置順序,并不是對(duì)參數(shù)賦值 Skill skill = 2; //支持自定義的數(shù)據(jù)格式,非常靈活 }; //返回的對(duì)象 message HelloResponse { string result = 1; mapmap_result = 2; //支持map數(shù)據(jù)格式,類似dict }; message Skill { string name = 1; };
3、用protoc和相應(yīng)的插件編譯生成相應(yīng)語言的代碼。
python -m grpc_tools.protoc -I ./ --python_out=./ --grpc_python_out=. ./hello.proto
使用編譯工具將proto文件轉(zhuǎn)換成py文件,直接在當(dāng)前文件目錄下運(yùn)行上述代碼。
4、編寫grpc服務(wù)器代碼。
#! /usr/bin/env python # coding=utf8 import time from 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,實(shí)現(xiàn)hello方法 ''' def __init__(self): pass def hello(self, request, context): ''' 具體實(shí)現(xiàn)hello的方法,并按照pb的返回對(duì)象構(gòu)造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(): ''' 模擬服務(wù)啟動(dòng) :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()
5、編寫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(): ''' 模擬請(qǐng)求服務(wù)方法信息 :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(): ''' 模擬請(qǐng)求服務(wù)方法信息 :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()
6、調(diào)用測試。
首先啟動(dòng)運(yùn)行服務(wù)器的代碼,然后啟動(dòng)運(yùn)行客戶端的代碼。
以上是“Python怎么搭建gRPC服務(wù)”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!
文章題目:Python怎么搭建gRPC服務(wù)
網(wǎng)站URL:http://www.ef60e0e.cn/article/pojoho.html