美文网首页
grpc python

grpc python

作者: hehehehe | 来源:发表于2023-04-23 16:50 被阅读0次

./pip3 install grpcio grpcio-tools protobuf -i http://mirrors.aliyun.com/pypi/simple --trusted-host mirrors.aliyun.com

proto

// 指定版本
syntax="proto3";
// 包
package user;

// 创建service
service User {
    // user method
    rpc AddUser(UserRequest) returns (UserResponse) {}
    rpc GetUser(GetUserRequest) returns (GetUserResponse) {}
}

// 请求参数消息体 1、2 是指参数的个数顺序
message UserRequest {
    string username = 1;
    int32 age = 2;
}

// 返回参数消息体
message UserResponse {
    string err = 1;
}

// 请求参数消息体
message GetUserRequest {
    string username = 1;
}

// 返回参数消息体
message GetUserResponse {
    string username = 1;
    int32 age = 2;
}

python3 -m grpc_tools.protoc -I=. --python_out=. --grpc_python_out=. user.proto

server

# server.py
import time

import grpc
from concurrent import futures

import user_pb2, user_pb2_grpc
from user import UserServicer


def main():
    # futures.ThreadPoolExecutor(max_workers=10) 指定最大线程数,不指定默认是 cpu个数 x 5
    """
        if max_workers is None:
        # Use this number because ThreadPoolExecutor is often
        # used to overlap I/O instead of CPU work.
        max_workers = (os.cpu_count() or 1) * 5
    """
    server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
    # 注册User Service
    user_server = UserServicer()
    user_pb2_grpc.add_UserServicer_to_server(user_server, server)
    # 启动服务
    server.add_insecure_port("127.0.0.1:8000")
    server.start()

    try:
        print('start rpc service')
        while True:
            time.sleep(60 * 60)
    except:
        server.stop(0)


if __name__ == '__main__':
    main()

client

# client.py
import grpc

from proto import user_pb2_grpc, user_pb2


def main():
    # 连接RPC 服务器
    channel = grpc.insecure_channel("localhost:8000")
    # 创建 Stub
    user_cli = user_pb2_grpc.UserStub(channel)
    # 调用 AddUser
    value = user_cli.AddUser(user_pb2.UserRequest(username='danni', age=20))
    print(value)


if __name__ == '__main__':
    main()
# user.py
import user_pb2, user_pb2_grpc


class UserServicer(user_pb2_grpc.UserServicer):
    def AddUser(self, request, context):
        print(request.username, request.age)
        # 具体的业务逻辑
        return user_pb2.UserResponse(err='ok')

    def GetUser(self, request, context):
        print(request.username)
        # 具体的业务逻辑
        return user_pb2.GetUserResponse(username='danni', age=12)

相关文章

  • gRPC之python

    安装 安装grpc 安装python grpc的protobuf的编译工具 安装protobuf的python依赖...

  • gRPC

    基础:GRPC的产生动机和设计原则grpc| python 实战 grpcPython版gRPC入门实验 - 知乎...

  • grpc| python 实战 grpc

    date: 2018-5-15 22:12:32title: grpc| python 实战 grpcdescri...

  • gRPC in Python

    gRPC 是 Google 开放的一款 RPC (Remote Procedure Call) 框架,建立在 HT...

  • python gRPC

    最近在用 python 写项目,项目中有许多 AI 服务需要相互调用,为了服务之间的解耦合,想尝试采用 gRPC ...

  • Java与Python使用grpc跨平台调用

    本文通过grpc实现java与java之间的通信、java和python之间的相互调用、python与python...

  • gRPC 跨进程使用引发的问题

    问题描述 在 Python 项目中使用 gRPC 进行通信,跨进程使用时,会出现阻塞或报错的情况(根据 gRPC....

  • grpc在django中的使用

    最近在做微服务这一块,后端与java合作,自己是python的,所以考虑使用grpc,一点考虑是grpc是http...

  • gRPC (四)python gRPC样例

    本文代码地址 https://gitee.com/shoothzj/grpc-examples[https://g...

  • Python gRPC笔记

    简介: gRPC[http://www.oschina.net/p/grpc-framework] 是Google...

网友评论

      本文标题:grpc python

      本文链接:https://www.haomeiwen.com/subject/ddlyjdtx.html