跳转到主要内容

适用于asyncio的纯Python gRPC实现

项目描述

https://raw.githubusercontent.com/vshymanskyy/StandWithUkraine/7e1631d13476f1e870af0d5605b643fc14471a6d/banner-direct-single.svg

project documentation version tag downloads license

本项目基于 hyper-h2,并且需要Python >= 3.7。

示例

请参阅项目存储库中的 examples 目录中的所有可用示例。

客户端

import asyncio

from grpclib.client import Channel

# generated by protoc
from .helloworld_pb2 import HelloRequest, HelloReply
from .helloworld_grpc import GreeterStub


async def main():
    async with Channel('127.0.0.1', 50051) as channel:
        greeter = GreeterStub(channel)

        reply = await greeter.SayHello(HelloRequest(name='Dr. Strange'))
        print(reply.message)


if __name__ == '__main__':
    asyncio.run(main())

服务器

import asyncio

from grpclib.utils import graceful_exit
from grpclib.server import Server

# generated by protoc
from .helloworld_pb2 import HelloReply
from .helloworld_grpc import GreeterBase


class Greeter(GreeterBase):

    async def SayHello(self, stream):
        request = await stream.recv_message()
        message = f'Hello, {request.name}!'
        await stream.send_message(HelloReply(message=message))


async def main(*, host='127.0.0.1', port=50051):
    server = Server([Greeter()])
    # Note: graceful_exit isn't supported in Windows
    with graceful_exit([server]):
        await server.start(host, port)
        print(f'Serving on {host}:{port}')
        await server.wait_closed()


if __name__ == '__main__':
    asyncio.run(main())

安装

$ pip3 install "grpclib[protobuf]"

错误修复和新功能通常通过发布候选版发布

$ pip3 install --upgrade --pre "grpclib[protobuf]"

对于代码生成,您还需要一个 protoc 编译器,该编译器可以通过 protobuf 系统包安装

$ brew install protobuf  # example for macOS users
$ protoc --version
libprotoc ...

或者 您可以使用来自 grpcio-tools Python包的 protoc 编译器

$ pip3 install grpcio-tools
$ python3 -m grpc_tools.protoc --version
libprotoc ...

注意: grpciogrpcio-tools 包在运行时不是必需的,grpcio-tools 包仅在代码生成期间使用。

protoc 插件

为了使用此库,您必须使用提供的插件生成特殊的存根文件,可以使用以下方式使用这些文件

$ python3 -m grpc_tools.protoc -I. --python_out=. --grpclib_python_out=. helloworld/helloworld.proto
                                                    ^----- note -----^

此命令将生成 helloworld_pb2.pyhelloworld_grpc.py 文件。

实现了 --grpclib_python_out 选项的插件应作为 protoc 编译器的 protoc-gen-grpclib_python 可执行文件可用,该文件应在安装 grpclib 库时通过 pip 安装到您的 $PATH 中。

在 v0.3.2 版本中更新:将 --python_grpc_out 选项重命名为 --grpclib_python_out

贡献

  • 在提交拉取请求之前请提交一个问题

  • 在您处理拉取请求时,不要合并/折叠/重新基您的开发分支,如果这真的有必要,请使用重新基

  • 您可以使用 Tox 来测试和检查您的更改,但依靠 CI 来处理这个问题是可以的

项目详情


发行历史 发布通知 | RSS 源

下载文件

下载适合您平台的文件。如果您不确定选择哪一个,请了解有关安装包的更多信息。

源代码分发

grpclib-0.4.7.tar.gz (61.3 kB 查看散列值)

上传时间 源代码

由以下机构支持