27.grpc python 使用教程

1 篇文章 0 订阅

1.写protobuf 文件


syntax = "proto3";

package rpc_package;

// define a service
service AirRecognitionService {
    // define the interface and data type

    rpc  SVMAirRecognition(MLAirRequest) returns (MLAirReply) {}
    rpc  CNNAirRecognition(DLAirRequest) returns (DLAirReply) {}

}

// define the data type of request
message MLAirRequest {

      int32 fs_rate=1;
      repeated float sig=2;#传入一维数组


}

// define the data type of response
message MLAirReply {
    string mlmessage = 1;

}


// define the data type of request
message DLAirRequest {

      int32 fs_rate=1;
      repeated float sig=2;传入一维数组


}

// define the data type of response
message DLAirReply {
    string dlmessage = 1;

}

2.使用protobuf 编译器生成
#根据你自己的文件夹函数部署可修改下面代码

python -m grpc_tools.protoc -I=./protos --python_out=./rpc_package --grpc_python_out=./rpc_package ./protos/AirRecognition.proto

我的文件部署是
文件部署
3.在 AirRecognition_client.py中写

# @File  : AirRecognition_client.py
# @Author: Wang Zhimin
# @Date  :  2019/10/28
#!/usr/bin/env python
# -*- coding: utf-8 -*-

from __future__ import print_function
import logging
import cv2
import grpc
from rpc_package.AirRecognition_pb2 import MLAirRequest,DLAirRequest
from rpc_package.AirRecognition_pb2_grpc import AirRecognitionServiceStub
import numpy as np
import soundfile as sf
def run():
    # 使用with语法保证channel自动close
    with grpc.insecure_channel('localhost:50000') as channel:
        # 客户端通过stub来实现rpc通信
        stub = AirRecognitionServiceStub(channel)

        dir1 = "D:/work/pictures/1/9.jpg"
        dir2 = "D:/work/音频原始数据/10.wav"

        dir3 = "D:/work/pictures/1/1.jpg"
        sig, fs_rate = sf.read(dir2)
        sig=np.array(sig)
        # 客户端必须使用定义好的类型,这里是HelloRequest类型

        ML = stub.SVMAirRecognition(MLAirRequest(sig=sig,fs_rate=fs_rate))#机器学习SVM

        DL = stub.CNNAirRecognition(DLAirRequest(sig=sig,fs_rate=fs_rate))#深度学习

    print ("DL's result: " + DL.dlmessage)
    print("ML's result: " + ML.mlmessage)

if __name__ == "__main__":
    logging.basicConfig()
    run()

4.在AirRecognition_server.py中写

# @File  : AirRecognition_server.py
# @Author: Wang Zhimin
# @Date  :  2019/10/28

#!/usr/bin/env python
# -*-coding: utf-8 -*-

from concurrent import futures
import grpc
import logging
import time
import numpy as np
import tensorflow as tf
from scipy import signal
from scipy.fftpack import fft
import pickle
import CnnModel
import ModelSave
from config import Config
import cv2
from rpc_package.AirRecognition_pb2_grpc import add_AirRecognitionServiceServicer_to_server, \
    AirRecognitionServiceServicer
from rpc_package.AirRecognition_pb2 import MLAirReply,DLAirReply
from scipy.misc import imsave

class Air(AirRecognitionServiceServicer):

    # 这里实现我们定义的接口

    def SVMAirRecognition(self, request, context):
        sig=request.sig

        fs_rate=request.fs_rate
          "...........中间写实际函数............"
        return MLAirReply(mlmessage='Hello, %s.不是飞机' % label, )
        
    def CNNAirRecognition(self, request, context):
        sig=request.sig
        fs_rate=request.fs_rate   # sig为矩阵 fs_data=采样率
	"...........中间写实际函数............"
        return DLAirReply(dlmessage='Hello, %s.不是飞机' % label)
            

def serve():
    # 这里通过thread pool来并发处理server的任务
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))

    # 将对应的任务处理函数添加到rpc server中
    add_AirRecognitionServiceServicer_to_server(Air(), server)

    # 这里使用的非安全接口,世界gRPC支持TLS/SSL安全连接,以及各种鉴权机制
    server.add_insecure_port('[::]:50000')
    server.start()
    try:
        while True:
            time.sleep(60 * 60 * 24)
    except KeyboardInterrupt:
        server.stop(0)


if __name__ == "__main__":
    logging.basicConfig()
    serve()

5.先启动AirRecognition_server
再启动AirRecognition_client

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值