本篇內(nèi)容介紹了“python使用grpc并打包成python模塊的方法”的有關(guān)知識(shí),在實(shí)際案例的操作過程中,不少人都會(huì)遇到這樣的困境,接下來就讓小編帶領(lǐng)大家學(xué)習(xí)一下如何處理這些情況吧!希望大家仔細(xì)閱讀,能夠?qū)W有所成!
創(chuàng)新互聯(lián)建站專注為客戶提供全方位的互聯(lián)網(wǎng)綜合服務(wù),包含不限于成都做網(wǎng)站、網(wǎng)站制作、成都外貿(mào)網(wǎng)站建設(shè)、肅北網(wǎng)絡(luò)推廣、小程序開發(fā)、肅北網(wǎng)絡(luò)營銷、肅北企業(yè)策劃、肅北品牌公關(guān)、搜索引擎seo、人物專訪、企業(yè)宣傳片、企業(yè)代運(yùn)營等,從售前售中售后,我們都將竭誠為您服務(wù),您的肯定,是我們最大的嘉獎(jiǎng);創(chuàng)新互聯(lián)建站為所有大學(xué)生創(chuàng)業(yè)者提供肅北建站搭建服務(wù),24小時(shí)服務(wù)熱線:18982081108,官方網(wǎng)址:www.cdcxhl.com
xmlrpc也是可行的方案,也相對(duì)更加簡(jiǎn)單
一、環(huán)境
python3.6
二、安裝模塊
pip3 install grpcio pip3 install protobuf pip3 install grpcio-tools
三、準(zhǔn)備grpc配置文件grpcdatabase.proto
目錄結(jié)構(gòu):
內(nèi)容如下:
syntax = "proto3"; package grpcServer; service Greeter { rpc GetContent (Request) returns (Return) {} //定義要調(diào)用的函數(shù)(GetContent)+(Request)接受的參數(shù)+(Return)返回的參數(shù) } message Request { //傳參數(shù)據(jù)類型 string content = 1;//文本 int32 code=2; //返回狀態(tài)0success;1failed } message Return { //返回?cái)?shù)據(jù)類型 string message = 1;//文本 int32 code=2; //返回狀態(tài)0success;1failed } //執(zhí)行命令+安裝步驟 //python3 -m grpc_tools.protoc -I. --python_out=grpc_base_models/ --grpc_python_out=grpc_base_models/ grpcdatabase.proto
編譯:生成grpcatabase_pb2.py grpcdatabase_pb2_grpc.py文件
python3 -m grpc_tools.protoc -I. --python_out=grpc_base_models/ --grpc_python_out=grpc_base_models/ grpcdatabase.proto
編寫服務(wù)端代碼:
# -*- coding: utf-8 -*- # @author: chenhuachao # @time: 2019/3/7 # Servers.py import sys sys.path.append('grpc_base_models') import grpc import time from concurrent import futures import grpcdatabase_pb2 import grpcdatabase_pb2_grpc # from grpc_base_models import grpcdatabase_pb2 # from grpc_base_models import grpcdatabase_pb2_grpc _SLEEP_TIME = 60 _HOST = "0.0.0.0" _PORT = "19999" class RpcServer(grpcdatabase_pb2_grpc.GreeterServicer): def GetContent(self, request, context): ''' 獲取文章摘要 :param request: :param context: :return: ''' try: _content = request.content code = 0 except Exception as e: _content = str(e) code=1 return grpcdatabase_pb2.Return(message=_content,code=code) def server(): if sys.argv.__len__()>=2: _PORT = sys.argv[1] else: _PORT = "19999" grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=10)) grpcdatabase_pb2_grpc.add_GreeterServicer_to_server(RpcServer(), grpcServer) grpcServer.add_insecure_port("{0}:{1}".format(_HOST, _PORT)) grpcServer.start() try: while True: time.sleep(_SLEEP_TIME) except KeyboardInterrupt: grpcServer.stop(0) if __name__ == '__main__': server()
編寫客戶端代碼:
# -*- coding: utf-8 -*- # @author: chenhuachao # @time: 2019/3/7 # Client.py import sys import grpc sys.path.append('grpc_base_models') import grpcdatabase_pb2_grpc import grpcdatabase_pb2 # from grpc_base_models import grpcdatabase_pb2_grpc # from grpc_base_models import grpcdatabase_pb2 # _HOST = '192.168.3.191' _HOST = '127.0.0.1' _PORT = '19999' def RpcClient(funcname,content): ''' rpc客戶端程序 :param funcname: 可用funcname為下面兩個(gè) >>> GetContent 獲取摘要, 參數(shù):content='文本' *** 上面兩個(gè)函數(shù)均返回message屬性和code(1:failed 0:success)屬性 >>> 返回值:response.message response.code :return: ''' with grpc.insecure_channel("{0}:{1}".format(_HOST, _PORT)) as channel: client = grpcdatabase_pb2_grpc.GreeterStub(channel=channel) if hasattr(client,funcname): response = getattr(client,funcname)(grpcdatabase_pb2.Request(content=content)) else: raise Exception(u"函數(shù)名錯(cuò)誤") print("message=" , response.message) print( "code=",response.code) if __name__ == '__main__': text = u''' 測(cè)試的文本 ''' RpcClient('GetContent',text)
分別運(yùn)行:Server.py 和Client.py 查看結(jié)果
添加setup.py文件在根目錄下:結(jié)構(gòu)圖
setup.py文件內(nèi)容如下
# -*- coding: utf-8 -*- # @author: chenhuachao # @time: 2019/3/8 # setup.py from setuptools import setup,find_packages setup( name = "grpc_base_models", version = "0.0.1", keywords = ("pip", "pygrpc", "company", "chenhuachao"), description = "python版本的grpc公用模塊,個(gè)人項(xiàng)目專用,僅供參考", long_description="grpc server for python", license="MIT Licence", url="https://github.com/leizhu900516", author="chenhuachao", author_email="leizhu900516@163.com", packages = find_packages(), install_requires = [ 'grpcio==1.19.0', 'grpcio-tools==1.19.0', 'protobuf==3.7.0', ] )
打包:
python3 setup.py sdist 如下圖:
安裝:pip install dist/grpc_base_models-0.0.1.tar.gz
即可在python腳本中使用
引用即可:
from grpc_base_models import grpcdatabase_pb2_grpc from grpc_base_models import grpcdatabase_pb2
“python使用grpc并打包成python模塊的方法”的內(nèi)容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業(yè)相關(guān)的知識(shí)可以關(guān)注創(chuàng)新互聯(lián)網(wǎng)站,小編將為大家輸出更多高質(zhì)量的實(shí)用文章!