Nginx配置 Quartz Markdown编辑器 MongoDB ipv4 list variables import jwt Avalon vue原理 bootstrap管理模板 easyui视频 时间戳java oracle增加主键 oracle时间格式化 js基本数据类型有哪些 表白网页源码 python循环语句 java的基本数据类型 java重命名 java格式化日期 java函数调用 嵌入式linux驱动程序设计从入门到精通 神龙激活 字幕制作软件哪个好 方正兰亭字体下载 selinux关闭 spss20安装教程 联想小新键盘灯怎么开 dos系统下载 疯狂的站长 renderto qq飞车刷车 ps虚化背景 深度学习pdf steam错误代码118怎么解决 this关键字 ppt去掉背景音乐 qq三国辅助
当前位置: 首页 > 学习教程  > python

python 实战 grpc:一个helloworld的demo

2021/2/6 22:54:15 文章标签: 测试文章如有侵权请发送至邮箱809451989@qq.com投诉后文章立即删除

目录:python 实战 grpc 一个helloworld的demo1、安装pip2、升级pip3、安装python4、安装grpc5、安装 ProtoBuf 相关的 python 依赖库6、安装 python grpc 的 protobuf 编译工具:简单的demo1、编译helloworld.proto文件2、编写服务端和客户端代码2.1 创建…

目录:

    • python 实战 grpc 一个helloworld的demo
      • 1、安装pip
      • 2、升级pip
      • 3、安装python
      • 4、安装grpc
      • 5、安装 ProtoBuf 相关的 python 依赖库
      • 6、安装 python grpc 的 protobuf 编译工具:
    • 简单的demo
      • 1、编译helloworld.proto文件
      • 2、编写服务端和客户端代码
        • 2.1 创建服务端代码 service.py
        • 2.2 创建客户端代码 client.py

python 实战 grpc 一个helloworld的demo

1、安装pip

2、升级pip

在下面两个命令都不起作用的情况下,

python -m pip install -U pip
python -m pip install --upgrade pip

使用这个命令

easy_install --upgrade pip

直接复制到 cmd 然后回车,很快就完成升级了。

  pip --version

然后就可以看到版本信息了。

3、安装python

本次demo使用python版本,首先需要准备python3环境:
Python 3.5或更高版本

4、安装grpc

pip install grpcio -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

5、安装 ProtoBuf 相关的 python 依赖库

pip install protobuf

6、安装 python grpc 的 protobuf 编译工具:

pip install grpcio-tools

需要换成国内源
阿里云 http://mirrors.aliyun.com/pypi/simple/
中国科技大学 https://pypi.mirrors.ustc.edu.cn/simple/
豆瓣(douban) http://pypi.douban.com/simple/
清华大学 https://pypi.tuna.tsinghua.edu.cn/simple/
中国科学技术大学 http://pypi.mirrors.ustc.edu.cn/simple/

再输入python.exe -m pip install proto -i http://pypi.douban.com/simple --trusted-host pypi.douban.com
把红色的matplotlib替换成你要安装的库就可以了

简单的demo

1、编译helloworld.proto文件

在工作目录下新建proto文件夹,将helloworld.proto文件放在该文件夹下。helloworld.proto 文件内容如下:

syntax = "proto3";

option java_multiple_files = true;
option java_package = "io.grpc.examples.helloworld";
option java_outer_classname = "HelloWorldProto";
option objc_class_prefix = "HLW";

package helloworld;  // 对应包名

// 定义服务
service Greeter {
  // Sends a greeting
  rpc SayHello (HelloRequest) returns (HelloReply) {
//    插件内容
  }
}

// 客户端传的名字
message HelloRequest {
  string name = 1;
}

// 服务端返回的消息
message HelloReply {
  string message = 1;
}

通过命令行进入到该目录下,输入指令:编译 proto 文件

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

python -m grpc_tools.protoc: python 下的 protoc 编译器通过 python 模块(module) 实现, 所以说这一步非常省心
–python_out=. : 编译生成处理 protobuf 相关的代码的路径, 这里生成到当前目录
–grpc_python_out=. : 编译生成处理 grpc 相关的代码的路径, 这里生成到当前目录
-I. helloworld.proto : proto 文件的路径, 这里的 proto 文件在当前目录
此时在该目录下生成了两个文件helloworld_pb2.py 和helloworld_pb2_grpc.py
helloworld_pb2.py此文件包含生成的 request(HelloRequest) 和 response(HelloReply) 类。
hello_pb2_grpc.py 此文件包含生成的 客户端(GreeterStub)和服务端(GreeterServicer)的类。

2、编写服务端和客户端代码

2.1 创建服务端代码 service.py

from concurrent import futures
import time
import grpc
import helloworld_pb2
import helloworld_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24


class Greeter(helloworld_pb2_grpc.GreeterServicer):
    # 工作函数
    def SayHello(self, request, context):
        print(request.name)
        message = "This message is from Server.And what i want to say is hello \" " + request.name + " \"";
        return helloworld_pb2.HelloReply(message = message)


def serve():
    # gRPC 服务器
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    print("sever is opening ,waiting for message...")
    server.start()  # start() 不会阻塞,如果运行时你的代码没有其它的事情可做,你可能需要循环等待。
    try:
        while True:
            time.sleep(_ONE_DAY_IN_SECONDS)
    except KeyboardInterrupt:
        server.stop(0)

if __name__ == '__main__':
    serve()

2.2 创建客户端代码 client.py

from __future__ import print_function

import grpc

import helloworld_pb2
import helloworld_pb2_grpc


def run():
    channel = grpc.insecure_channel('localhost:50051')
    stub = helloworld_pb2_grpc.GreeterStub(channel)
    response = stub.SayHello(helloworld_pb2.HelloRequest(name='Hello World! This is message from client!'))
    print("Greeter client received: " + response.message)


if __name__ == '__main__':
    run()

运行结果:
在这里插入图片描述


本文链接: http://www.dtmao.cc/news_show_2000153.shtml

附件下载

相关教程

    暂无相关的数据...

共有条评论 网友评论

验证码: 看不清楚?