首页 > 编程语言 >【Python小随笔】 Grpc协议的使用

【Python小随笔】 Grpc协议的使用

时间:2023-12-13 14:12:31浏览次数:44  
标签:__ pb2 Python 接口 server Grpc test 随笔 grpc

定义接口

// test.proto

syntax = "proto3";
option cc_generic_services = true;


service Greeter {
  // 第一个接口
  rpc One(OneRequest) returns (OneResponse) {}
  // 第二个接口
  rpc Two(TwoRequest) returns (TwoResponse) {}

}


// 第1个接口 请求值
message OneRequest {
  string name = 1;
}

// 第1个接口 返回值
message OneResponse {
  string message = 1;
}


// 第2个接口 请求值
message TwoRequest {
  string age = 2;
}

// 第2个接口 返回值
message TwoResponse {
  string message = 2;
}

执行编译命令

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

创建服务端

# grpc_server.py

import test_pb2,test_pb2_grpc
import grpc
from concurrent import futures


# 继承生成的Server类做逻辑接口
class Greeter(test_pb2_grpc.GreeterServicer):
    """
        注意:
            这里函数的命名需要跟proto文件里面的接口名字一致
    """

    def One(self, request, context):
        # 第1个逻辑接口
        return test_pb2.OneResponse(message='Hello, ' + request.name)


    def Two(self, request, context):
        # 第2接口逻辑接口
        return test_pb2.TwoResponse(message='Goodbye, ' + request.name)

    
# 启动服务端
def serve():
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    test_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:8800')
    server.start()
    print("启动成功,等待接受数据...")
    server.wait_for_termination()

if __name__ == '__main__':
    serve()

客户端

# grpc_client.py

import grpc
import test_pb2,test_pb2_grpc



def run():
    # 创建连接
    channel = grpc.insecure_channel('127.0.0.1:8800')
    # 创建客户端
    client = test_pb2_grpc.GreeterStub(channel)
    # 创建 传参值
    obj  = test_pb2.OneRequest(name="IM")
    # 请求接口
    response = client.One(obj)
    print("response",response)


if __name__ == '__main__':
    run()

标签:__,pb2,Python,接口,server,Grpc,test,随笔,grpc
From: https://www.cnblogs.com/wanghong1994/p/17898908.html

相关文章

  • Python——第五章:shutil模块
    复制文件把dir1的文件a.txt移动到dir2内importshutilshutil.move("dir1/a.txt","dir2")复制两个文件句柄f1=open("dir2/a.txt",mode="rb")#准备读f1f2=open("dir1/b.txt",mode="wb")#准备写f2shutil.copyfileobj(f1,......
  • python N 字形变换 多种解法
    解法一:使用二维数组defconvert(s,numRows):ifnumRows==1ornumRows>=len(s):returnsrows=['']*numRowsindex,step=0,1forcharins:rows[index]+=charifindex==0:......
  • 随机模拟——蒙特卡洛算法的Python实现
    蒙特卡洛方法是一类基于随机抽样的数值计算技术,通过模拟随机事件的概率过程,从而近似计算复杂问题的数学期望或积分。其核心思想是通过大量的随机抽样来逼近问题的解,从而在随机性中获得问题的统计特性。蒙特卡洛方法广泛应用于概率统计、物理学、金融工程、生物学等领域。在蒙特卡......
  • python——小游戏(ball,bird)
      ball #-*-coding:utf-8-*-"""CreatedonWedDec1309:19:382023@author:kabuqinuo"""importsys#导入sys模块importpygame#导入pygame模块pygame.init()#初始化pygamesize=width,height=640,480#设置窗......
  • STM32学习随笔 12.13
    慢摸摸的学习之前跟着B站江协科技UP学51感觉没啥,学到STM32就感觉很吃力,又想钻研清楚,看到定时器TIM章节零零总总差不多耽搁快进一个月了总结下近期学到的东西学习掌握多元条件运算符,这样可以省略很多if()else()或者switch()case;语句示例:      i-=(i>10000)?10......
  • Python——第五章:hashlib模块
    hashlib模块hashlib模块是Python中用于加密散列(hash)算法的模块。它提供了对常见的哈希算法(如MD5、SHA-1、SHA-256等)的支持,使得开发者可以轻松地在其应用中进行数据的安全散列。以下是hashlib模块中一些常用的哈希算法:MD5(MessageDigestAlgorithm5):产生128位的哈......
  • 【python】文件锁模块fcntl
      #!/usr/bin/python#coding:utf8importosimportsysimporttimeimportfcntl#导入模块classFLOCK(ojbect):def__init__(self,name):""":paramname:文件名"""self.fobj=open(name,'......
  • Python报错:performance hint: av/logging.pyx:232:5: the GIL to be acquired
     参考:https://stackoverflow.com/questions/77410272/problems-installing-python-av-in-windows-11https://github.com/PyAV-Org/PyAV/issues/1177  ================================  报错信息:C:\Windows.old\Users\chris>pipinstallavDefaultingtouserinstallatio......
  • Python报错:pkg-config could not find libraries ['avformat', 'avcodec', 'av
    参考:https://github.com/PyAV-Org/PyAV/issues/238https://pyav.org/docs/6.1.2/installation.html#mac-os-x  =====================  报错信息:C:\Users\liuxue>pipinstallavCollectingavUsingcachedav-0.3.3.tar.gzInstallingcollectedpackages:avRunning......
  • Python学习多线程、多进程、多协程记录
    一、多线程应用于请求和IO#1.Python中关于使用多线程多进程的库/模块#2.选择并发编程方式(多线程Thread、多进程Process、多协程Coroutine)前置知识: 一、三种有各自的应用场景 1.一个进程中可以启动多个线程 2.一个线程中可以启动多个协程 二、各自优缺点 1......