Python gRPC 环境搭建及测试

参考文章:https://www.jianshu.com/p/14e6f5217f40(修改了部分bug--两个main函数,作者的写法只适用于所有文件夹在同一目录的情况,若是两个不同的文件夹,运行会出错。)

小白一枚,啥也不懂,直接上手,虽然不知道我在干什么,但是我运行成功了,手动哈哈哈。。。

安装:

  1. gRPC 的安装:

$ pip install grpcio

  1. 安装 ProtoBuf 相关的 python 依赖库:

$ pip install protobuf

  1. 安装 python grpc 的 protobuf 编译工具:

$ pip install grpcio-tools

文件生成

首先在IDE中新建项目,然后建立相对应的文件夹,椭圆圈圈是手动建立的文件,矩形框是自动生成的,下面详细说明。

1、在example中手动创建data.proto

输入下面代码段:

syntax = "proto3";
package example;
service FormatData {
  rpc DoFormat(Data) returns (Data){}
}
message Data {
  string text = 1;
}

然后打开命令窗(cmd或者是anaconda自带的prompt):

cd到data.proto所在的位置:

运行:

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

就会自动生成上面矩形框中的两个文件。

测试:

##################   补充   #################

还有就是,运行之前,将项目设置为源文件:

项目 -->  右键 --> Mark Directory as --> Sources Root

##################   结束   ################# 

client(main函数)

import grpc
import sys
import sys
sys.path.append('..')

from example import data_pb2, data_pb2_grpc
# sys.path.append(r'C:\Users\huaru\PycharmProjects\GRPC_demo')

_HOST = 'localhost'
_PORT = '8080'

def run():
    conn = grpc.insecure_channel(_HOST + ':' + _PORT)
    client = data_pb2_grpc.FormatDataStub(channel=conn)
    response = client.DoFormat(data_pb2.Data(text='hello,world!'))
    print("received: " + response.text)

if __name__ == '__main__':
    run()

serve(main函数)

import grpc
import time
from concurrent import futures
import sys
sys.path.append('..')
#sys.path

from example import data_pb2, data_pb2_grpc

_ONE_DAY_IN_SECONDS = 60 * 60 * 24
_HOST = 'localhost'
_PORT = '8080'

class FormatData(data_pb2_grpc.FormatDataServicer):
    def DoFormat(self, request, context):
        str = request.text
        return data_pb2.Data(text=str.upper())

def serve():
    grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
    data_pb2_grpc.add_FormatDataServicer_to_server(FormatData(), 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()

先运行serve,再运行client,结果:

 

 

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值