异步的纯python grpc实现

grpclib的Python项目详细描述


projectdocumentationversiontaglicense

这个项目基于hyper-h2需要python>;=3.6

Example

有关所有可用的目录,请参见项目存储库中的examples目录 例子。

Client

importasynciofromgrpclib.clientimportChannel# generated by protocfrom.helloworld_pb2importHelloRequest,HelloReplyfrom.helloworld_grpcimportGreeterStubasyncdefmain():channel=Channel('127.0.0.1',50051)greeter=GreeterStub(channel)reply:HelloReply=awaitgreeter.SayHello(HelloRequest(name='Dr. Strange'))print(reply.message)channel.close()if__name__=='__main__':asyncio.run(main())

Server

importasynciofromgrpclib.utilsimportgraceful_exitfromgrpclib.serverimportServer# generated by protocfrom.helloworld_pb2importHelloRequest,HelloReplyfrom.helloworld_grpcimportGreeterBaseclassGreeter(GreeterBase):asyncdefSayHello(self,stream):request:HelloRequest=awaitstream.recv_message()message=f'Hello, {request.name}!'awaitstream.send_message(HelloReply(message=message))asyncdefmain(*,host='127.0.0.1',port=50051):server=Server([Greeter()])withgraceful_exit([server]):awaitserver.start(host,port)print(f'Serving on {host}:{port}')awaitserver.wait_closed()if__name__=='__main__':asyncio.run(main())

Installation

$ pip3 install grpclib protobuf

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

$ pip3 install --upgrade --pre grpclib

对于代码生成,您还需要一个protoc编译器,它可以是 与protobuf系统包一起安装:

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

您可以使用grpcio-toolspython包中的protoc编译器:

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

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

^{tt1}$ plugin

为了使用这个库,您必须使用 提供的插件,可以像这样使用:

$ python3 -m grpc_tools.protoc -I. --python_out=. --python_grpc_out=. helloworld/helloworld.proto

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

实现--python_grpc_out选项的插件可用于 protoc编译器为protoc-gen-python_grpc可执行文件,它将 安装期间由pip/setuptools安装到$PATHgrpclib库。

Contributing

使用Tox来测试和整理更改。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
将Java中的对象列表序列化为json   在同一Play Framework项目中同时使用Ebean和JPA的java   oop如何在整个Java项目中共享API密钥   java ADT Eclipse SDK故障未找到DDM   扫描程序中变量的递归Java输入值未应用于方法中的变量   java将空格转换为命令行类型的空格   JavaSpring,如何决定客户机应该使用哪个服务?   java致命异常:main(Android标准)   java编译错误是因为类型检查还是三元运算符?   java Sikuli+Webdriver:getting error x.png看起来像一个文件,但在磁盘上找不到。假设是文本   java选择位置。。。。ms sql 2005中需要电气状态   由于OSGi捆绑包依赖性问题,java无法启动RCP应用程序   json java gson fromjson返回非泛型的null   如何将google api访问令牌从java服务器传递到gapi javascript客户端?   java在已排序的LinkedList中添加元素   java ForkJoinPool为什么程序抛出OutOfMemoryError?   java SQUARE无法解析为Processing/Eclipse中的变量   java如何为Sun App Server 8.2设置JNDI