博客
关于我
python gRPC简单示例
阅读量:804 次
发布时间:2023-03-05

本文共 3486 字,大约阅读时间需要 11 分钟。

Ubuntu 18.04 安装 gRPC 及示例工程

安装 gRPC

在 Ubuntu 18.04 系统上安装 gRPC 和 Protobuf 可能需要以下步骤:

  • 安装 Protobuf 编译器 gRPC
  • 安装 Protobuf 编译器
  • 使用 pip 安装 gRPC Python 库
  • 安装 Protobuf Python 依赖库
  • 安装 gRPC 的 Python 编译工具
  • 安装完成后,可以开始编写 gRPC 服务和客户端代码。

    编写示例工程

    项目结构

    创建一个新的项目目录,按照以下结构组织代码:

    .├── stream/│   ├── stream.proto│   ├── stream_pb2.py│   └── stream_pb2_grpc.py├── simple_server.py└── simple_client.py

    编写 Protobuf 文件

    在 stream 目录中创建 stream.proto 文件:

    syntax = "proto3";package stream;service StreamService {  rpc SimpleFun(RequestData) returns (ResponseData) {  }}message RequestData {  string text = 1;}message ResponseData {  string text = 1;}

    使用 Protobuf 生成代码

    在 stream 目录中执行以下命令,生成 Python 代码:

    python -m grpc_tools.protoc --proto_path=. --python_out=. --grpc_python_out=. stream.proto

    注意:生成的 stream_pb2_grpc.py 文件中,stream__pb2 引用路径需要修正。

    服务器端代码

    编写 simple_server.py:

    #! /usr/bin/env python# -*- coding: utf-8 -*-import grpcimport timefrom concurrent import futuresfrom stream import stream_pb2, stream_pb2_grpcONE_DAY_IN_SECONDS = 60 * 60 * 24HOST = 'localhost'_PORT = '8883'class Servicer(stream_pb2_grpc.StreamServiceServicer):    def SimpleFun(self, request, context):        print("received: " + request.text)        return stream_pb2.ResponseData(text='hello,gRPC')def serve():    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))    stream_pb2_grpc.add_StreamServiceServicer_to_server(Servicer(), grpcServer)    grpcServer.add_insecure_port(HOST + ':' + _PORT)    grpcServer.start()    try:        while True:            time.sleep(ONE_DAY_IN_SECONDS)    except KeyboardInterrupt:        grpcServer.stop(0)if __name__ == '__main__':    serve()

    客户端代码

    编写 simple_client.py:

    #! /usr/bin/env python# -*- coding: utf-8 -*-import grpcfrom stream import stream_pb2, stream_pb2_grpcHOST = 'localhost'_PORT = '8883'def run():    with grpc.insecure_channel(HOST + ':' + _PORT) as conn:        client = stream_pb2_grpc.StreamServiceStub(channel=conn)        response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!'))        print("received: " + response.text)if __name__ == '__main__':    run()

    运行结果

  • 在终端启动服务器:
  • python simple_server.py
    1. 在另一终端启动客户端:
    2. python simple_client.py

      预计看到如下输出:

      received: hello,world!received: hello,gRPC

      完整代码

      # simple_server.py#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcimport timefrom concurrent import futuresfrom stream import stream_pb2, stream_pb2_grpcONE_DAY_IN_SECONDS = 60 * 60 * 24HOST = 'localhost'_PORT = '8883'class Servicer(stream_pb2_grpc.StreamServiceServicer):    def SimpleFun(self, request, context):        str = request.text        print("received: " + str)        return stream_pb2.ResponseData(text=('hello,gRPC'))def serve():    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))    stream_pb2_grpc.add_StreamServiceServicer_to_server(servicer(), grpcServer)    grpcServer.add_insecure_port(_HOST + ':' + _PORT)    grpcServer.start()    try:        while True:            time.sleep(_ONE_DAY_IN_SECONDS)    except KeyboardInterrupt:        grpcServer.stop(0)if __name__ == '__main__':    serve()# simple_client.py#! /usr/bin/env python# -*- coding: utf-8 -*-import grpcfrom stream import stream_pb2, stream_pb2_grpc_HOST = 'localhost'_PORT = '8883'def run():    conn = grpc.insecure_channel(_HOST + ':' + _PORT)    client = stream_pb2_grpc.StreamServiceStub(channel=conn)    response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!'))    print("received: " + response.text)if __name__ == '__main__':    run()

    转载地址:http://exafk.baihongyu.com/

    你可能感兴趣的文章
    python和java哪个更值得学——来自知乎高赞回答
    查看>>
    python和c混合编程 github_在pycharm中使用git版本管理以及同步github的方法
    查看>>
    python命名空间更改_Python模块xml.etree.ElementTree自动修改xml命名空间键
    查看>>
    Python命名中尾随下划线有什么好处?
    查看>>
    Python启动脚本
    查看>>
    Python听写汇总结果
    查看>>
    python吊打Excel?屁!那是你不会用!
    查看>>
    Python合并两张图片 | 先叠透明度再合并 (附Demo)
    查看>>
    python各进制的表述与转换
    查看>>
    python各种库安装
    查看>>
    python可视化matplotlib_如何使用Python中最强大的可视化工具Matplotlib?
    查看>>
    python可维护性_使用这7大神器,让你的Python 代码更容易于维护
    查看>>
    Python只运行一次while循环
    查看>>
    python变量的详细教程_Python零基础入门教程之语法入门[变量](第二期)
    查看>>
    Python变量命名方法-ChatGPT4o作答
    查看>>
    Python变量与运算符
    查看>>
    Python变量/运算符/函数/模块/string
    查看>>
    python发送邮件的时候出现 error (535, b‘5.7.3 Authentication unsuccessful‘) 解决方法
    查看>>
    python系列【仅供参考】:python flask框架 debug功能
    查看>>
    python发送notes邮件_使用python在Lotus Notes中发送邮件
    查看>>