python grpc学习

环境

pip install grpcio
pip install grpcio-tools

helloworld.proto

syntax = "proto3";

service Greeter {
    rpc SayHello(HelloRequest) returns (HelloReply) {}
    rpc SayHelloAgain(HelloRequest) returns (HelloReply) {}
}

message HelloRequest {
    string name = 1;
}

message HelloReply {
    string message = 1;
}

server

helloworld_grpc_server.py

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

# 实现 proto 文件中定义的 GreeterServicer
class Greeter(helloworld_pb2_grpc.GreeterServicer):
    # 实现 proto 文件中定义的 rpc 调用
    def SayHello(self, request, context):
        return helloworld_pb2.HelloReply(message = 'hello {msg}'.format(msg = request.name))

    def SayHelloAgain(self, request, context):
        return helloworld_pb2.HelloReply(message='hello {msg}'.format(msg = request.name))

def serve():
    # 启动 rpc 服务
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    helloworld_pb2_grpc.add_GreeterServicer_to_server(Greeter(), server)
    server.add_insecure_port('[::]:50051')
    server.start()
    try:
        while True:
            time.sleep(60*60*24) # one day in seconds
    except KeyboardInterrupt:
        server.stop(0)

if __name__ == '__main__':
    serve()

client

helloworld_grpc_client.py

import grpc
import helloworld_pb2
import helloworld_pb2_grpc

def run():
    # 连接 rpc 服务器
    channel = grpc.insecure_channel('localhost:50051')
    # 调用 rpc 服务
    stub = helloworld_pb2_grpc.GreeterStub(channel)
    response = stub.SayHello(helloworld_pb2.HelloRequest(name='czl'))
    print("Greeter client received: " + response.message)
    response = stub.SayHelloAgain(helloworld_pb2.HelloRequest(name='daydaygo'))
    print("Greeter client received: " + response.message)

if __name__ == '__main__':
    run()

编译proto文件

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

会生成helloworld_pb2_grpc.py和helloworld_pb2.py

python helloworld_grpc_server.py
python helloworld_grpc_client.py

参考文章

https://www.jianshu.com/p/43fdfeb105ff

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本门课程是带大家进入微服务领域入门的课程,很适合新手小白学习的课程。1: 什么是rpc?RPC(Remote Procedure Call)是函数对函数的远程调用,传输协议tcp,http,主要是基于xml,json序列化协议(这里的序列化协议是对数据编解码的方式),项目中我们真正用到的是grpcgrpc是一个框架,基于http2.0的长链接,性能有所改进,重要的是grpc用的是Google开源的protobuf序列化协议,它比json,xml性能更快,在压缩数据方面也更小。总之我们选择grpc最主要的有两点:1:支持跨语言开发(如python,golang,java)2:  grpc首先是一个框架,封装rpc,让程序员只关注代码逻辑即可 2: 为什么用grpc,而不用flask,django,tornado,即http协议?1:http的调用是根据url的(即restful),它跟rpc的调用最大的区别就是这里,rpc的调用,你就像调用一个本地函数一样简单,而且微服务,分布式也是从rpc开始的,学好rpc对以后做好分布式会更有帮助,其实go语言和python语言里都有rpc(如xmlrpc,jsonrpc,zerorpc),我们之所以学习go语言里的rpc是因为go语言的rpc相对更加灵活,go语言本身也支持高并发,这一点对于分布式来说更好。2:其次http协议,用过flask框架的人都知道,请求一次数据后就断开,而grpc基于http2.0,它不但可以保持长链接,传输效率也更高,使用方面,因为http2.0相当于tcp一样使用,现在很多大厂也都开始用http2.0了。http2.0相比http的优势很明显,头部压缩,分流,针对tcp的多路复用。所以基于http2.0的grpc无论从生态和性能方面都更好。 这张图是一个gRPC相关的架构图,同学们可以通过这张图了解gRPC在项目中的使用。
gRPC是一种高性能、开源的远程过程调用(RPC)技术,它支持跨语言、跨平台的RPC调用。而在Python中,gRPC作为一种快速、高效的通信方式,也被广泛应用于音视频等大规模数据的传输和处理。在语音转换方面,通过gRPC,我们可以实现一种快速、准确的语音转换服务。 具体而言,我们可以通过Python gRPC框架来构建一个语音转换服务。首先,我们需要定义我们自己的服务接口。这个接口可以包含一个或多个方法,用于对语音进行转换。例如,我们可以定义这样一个接口: ``` service SpeechConversion { rpc Convert (SpeechRequest) returns (SpeechResponse) {} } message SpeechRequest { bytes audio = 1; } message SpeechResponse { string text = 1; } ``` 在这个接口中,我们定义了一个Convert方法,它接收一个SpeechRequest消息,其中包含了需要转换的语音文件,然后返回一个SpeechResponse消息,其中包含了转换后的文本信息。通过gRPC,客户端可以将自己的请求发送给服务端,服务端接收请求后进行转换,最后将结果返回给客户端。 在实现具体的语音转换功能时,我们可以使用现有的语音转写或语音识别引擎,如百度语音、讯飞语音等,也可以使用深度学习技术,自己训练一个语音识别模型。而在 gRPC 中,我们可以使用 protobuf 和 grpcio 这两个 Python 库,其中 protobuf 用于定义消息的序列化和反序列化格式,grpcio 用于网络通信和服务端、客户端代码的生成。 总之,通过使用 gRPC + Python 技术实现语音转换功能,我们可以提高语音转换的速度和准确率,实现语音到文本的快速转换,为语音识别等相关应用提供强大的支持。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值