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

python使用grpc,并打包成pyt

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

python使用grpc,并打包成pyt

  • xmlrpc也是可行的方案,也相对更加简单

一、环境
python3.6
二、安装模块

pip3 install grpcio
pip3 install protobuf
pip3 install grpcio-tools

三、准备grpc配置文件grpcdatabase.proto
目录结构:
python使用grpc,并打包成python模块
内容如下:

syntax = "proto3";
package grpcServer;
service Greeter {
    rpc GetContent (Request) returns (Return) {} //定义要调用的函数(GetContent)+(Request)接受的参数+(Return)返回的参数
}

message Request {       //传参数据类型
    string content = 1;//文本
    int32 code=2;      //返回状态0success;1failed
}

message Return {       //返回数据类型
    string message = 1;//文本
    int32 code=2;      //返回状态0success;1failed
}
//执行命令+安装步骤
//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

python使用grpc,并打包成python模块
编写服务端代码:

# -*- 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为下面两个
        >>> GetContent  获取摘要, 参数:content='文本'
        *** 上面两个函数均返回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"函数名错误")
    print("message=" , response.message)
    print( "code=",response.code)
if __name__ == '__main__':
    text = u'''
    测试的文本
    '''
    RpcClient('GetContent',text)

分别运行:Server.py 和Client.py 查看结果
python使用grpc,并打包成python模块

上面服务端代码每次使用,都要依赖grpcdatabase_pb2*.py这两个文件,因此,我们可以打包为python模块。更加方便使用

添加setup.py文件在根目录下:结构图
python使用grpc,并打包成python模块
setup.py文件内容如下

# -*- 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公用模块,个人项目专用,仅供参考",
    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 如下图:
python使用grpc,并打包成python模块
安装: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实例

免责声明:

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

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

python使用grpc,并打包成pyt

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

下载Word文档

猜你喜欢

python使用grpc,并打包成pyt

xmlrpc也是可行的方案,也相对更加简单一、环境python3.6 二、安装模块pip3 install grpciopip3 install protobufpip3 install grpcio-tools三、准备grpc配置文件gr
2023-01-31

如何使用PyInstaller库把Python程序打包成exe

这篇文章主要介绍“如何使用PyInstaller库把Python程序打包成exe”,在日常操作中,相信很多人在如何使用PyInstaller库把Python程序打包成exe问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对
2023-06-30

怎么使用python多进程程序打包成exe

这篇文章主要介绍了怎么使用python多进程程序打包成exe的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用python多进程程序打包成exe文章都会有所收获,下面我们一起来看看吧。部分的多进程代码if
2023-07-04

unidbg-boot-server使用并打包jar调用

其实线上使用可以多种方式,比如pom引入spring boot自己去写一个接口实现; 但如果并发不是很高,可以使用synchronized关键字进行,若对并发有要求,建议直接使用 unidbg-boot-server开源项目; 从githu
2023-08-17

如何使用Springboot打成jar包thymeleaf

这篇文章主要介绍了如何使用Springboot打成jar包thymeleaf,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。Springboot打成jar包thymeleaf1
2023-06-25

如何使用Python打包APK

本教程讲解了如何使用Python打包APK。步骤包括安装环境、创建项目、编写代码、配置构建文件、构建APK、生成可签名APK和安装调试。还提供了进一步增强应用、满足Play商店要求、自动化构建过程和使用第三方库的提示。
如何使用Python打包APK
2024-04-02

如何使用pyinstaller打包Python

小编给大家分享一下如何使用pyinstaller打包Python,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!一、单个文件打包1.1 简单打包例如现在有一个mai
2023-06-15

使用innoSetup将mysql+nginx+redis+jar包打包成windows安装包

文章目录 目录一、介绍二、准备工作三、innoSetup四、创建工作目录五、mysql1、mysql服务初始化脚本2、mysql服务停止与删除脚本3、配置文件4、数据库初始化5、填坑 六、redis1、redis服务初始化脚本2
2023-08-17

如何把SpringBoot应用打包成Docker镜像并运行

本篇内容介绍了“如何把SpringBoot应用打包成Docker镜像并运行”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(1) 首先要有一个
2023-06-04

编程热搜

  • 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动态编译

目录