python gRPC简单示例
Ubuntu18.04安装gRPC
- protobuf-compiler-grpc安装
sudo apt-get install protobuf-compiler-grpc - protobuf-compiler安装
sudo apt-get install protobuf-compiler - gRPC 的安装
pip install grpcio - 安装 ProtoBuf 相关的 python 依赖库
pip install protobuf - 安装 python grpc 的 protobuf 编译工具
pip install grpcio-tools
编写示例工程
- 工程结构

- 编写 proto 文件
在工程下新建stream目录,新建stream.proto文件,文件可名称任意syntax = "proto3";
package stream;
service StreamService {
rpc SimpleFun(RequestData) returns (ResponseData){}
}
message RequestData {
string text = 1;
} message ResponseData {
string text = 1;
}
- 编译 protobuf
切换至stream目录,执行以下命令:
python -m grpc_tools.protoc -I. --python_out=. --grpc_python_out=. ./stream.proto
在
stream目录中执行编译,会生成:stream_pb2.py与stream_pb2_grpc.py,需修正stream_pb2_grpc.py的引用stream__pb2的路径
- 实现 server 端,
simple_server.py#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
import time
from concurrent import futures
from stream import stream_pb2, stream_pb2_grpc _ONE_DAY_IN_SECONDS = 60 * 60 * 24
_HOST = 'localhost'
_PORT = '8883' class servicer(stream_pb2_grpc.StreamServiceServicer): def SimpleFun(self, request, context):
str = request.text
print("received: " + str)
return stream_pb2.ResponseData(text=('hello,gRPC')) def serve():
grpcServer = grpc.server(futures.ThreadPoolExecutor(max_workers=4))
stream_pb2_grpc.add_StreamServiceServicer_to_server(servicer(), grpcServer)
grpcServer.add_insecure_port(_HOST + ':' + _PORT)
grpcServer.start()
try:
while True:
time.sleep(_ONE_DAY_IN_SECONDS)
except KeyboardInterrupt:
grpcServer.stop(0) if __name__ == '__main__':
serve()
- 实现 client端,
simple_client.py#! /usr/bin/env python
# -*- coding: utf-8 -*-
import grpc
from stream import stream_pb2, stream_pb2_grpc _HOST = 'localhost'
_PORT = '8883' def run():
conn = grpc.insecure_channel(_HOST + ':' + _PORT)
client = stream_pb2_grpc.StreamServiceStub(channel=conn)
response = client.SimpleFun(stream_pb2.RequestData(text='hello,world!'))
print("received: " + response.text) if __name__ == '__main__':
run()
- 执行结果
先启动simple_server.py再启动simple_client.py


- 完整代码
https://github.com/gm19900510/stream_grpc
python gRPC简单示例的更多相关文章
- Python Thrift 简单示例
本文基于Thrift-0.10,使用Python实现服务器端,使用Java实现客户端,演示了Thrift RPC调用示例.Java客户端提供两个字符串参数,Python服务器端计算这两个字符串的相似度 ...
- python psutil简单示例
python psutil简单示例 利用psutil编写简单的检测小脚本 0.安装psutil模块 ...
- Websocket - Websocket原理(握手、解密、加密)、基于Python实现简单示例
一.Websocket原理(握手.解密.加密) WebSocket协议是基于TCP的一种新的协议.WebSocket最初在HTML5规范中被引用为TCP连接,作为基于TCP的套接字API的占位符.它实 ...
- C#调用Python脚本的简单示例
C#调用Python脚本的简单示例 分类:Python (2311) (0) 举报 收藏 IronPython是一种在 .NET及 Mono上的 Python实现,由微软的 Jim Huguni ...
- Python自定义线程类简单示例
Python自定义线程类简单示例 这篇文章主要介绍了Python自定义线程类,结合简单实例形式分析Python线程的定义与调用相关操作技巧,需要的朋友可以参考下.具体如下: 一. 代码 # - ...
- python golang中grpc 使用示例代码详解
python 1.使用前准备,安装这三个库 pip install grpcio pip install protobuf pip install grpcio_tools 2.建立一个proto文件 ...
- robot framework环境搭建和简单示例
环境搭建 因为我的本机已经安装了python.selenium.pip等,所以还需安装以下程序 1.安装wxPythonhttp://downloads.sourceforge.net/wxpytho ...
- AJAX的简单示例:注册校验
众所周知,我们每次需要注册一个网站的用户名时,都会校验该邮箱.用户名是不是正确的格式.是不是有被使用过,密码是否符合规则,二次确认是否符合. 如果这些校验都采用form表单提交的话,会给用户带来极不好 ...
- web 框架的本质及自定义web框架 模板渲染jinja2 mvc 和 mtv框架 Django框架的下载安装 基于Django实现的一个简单示例
Django基础一之web框架的本质 本节目录 一 web框架的本质及自定义web框架 二 模板渲染JinJa2 三 MVC和MTV框架 四 Django的下载安装 五 基于Django实现的一个简单 ...
随机推荐
- Mimikatz 攻防杂谈
前几天看到了老外一篇讲 mimikatz 防御的文章,感觉行文思路还不错,但是内容稍有不足,国内也有一篇翻译,但是只是照着错误翻译的,所以就萌生了把那篇优秀文章,翻译复现,并加入其它一些内容,本文只是 ...
- [mysql]设置创建时间,更新时间未生效
问题描述: 新增一条case,create_time没有自动生成创建时间,值为空 原因 : create_time字段类型是DateTime(错误)而不是TIMESTAMP(正确) 解决办法: 把c ...
- PHP结合Ueditor并修改图片上传路径 微信小程序 拼接域名显示图片
前言 在使用UEditor编辑器时,一般我们都是需要修改默认的图片上传路径的,下面是我整理好的修改位置和方法供大家参考. 操作 Ueditor PHP版本本身自带了一套上传程序,我们可以在此基础中,找 ...
- 连接Xshell
连xshell之前先进入[root@localhost zxj]# vim /etc/ssh/sshd_config, 将115行删除注释改为UseDNS no, 保存重启sshd(xshell)的 ...
- AWSome Day简介
AWSome Day是什么? 它是一场为时一天.结合教育与技术新知的云计算技术免费研讨会.是面向所有开发人员.IT技术人员.或技术/业务领域决策者必备的基础云计算课程.AWS专业级讲师将在现场带领您从 ...
- Tutorial : Implementing Django Formsets
A step-by-step tutorial for setting up and testing a standard Django formset. I’ve noticed on #djang ...
- CF The World Is Just a Programming Task (Easy Version)【分析·思维】
题目传送门 题意: 给定一个括号序列,随意交换两个位置的括号之后,问有多少个不同长度的圈.关于圈的定义大概就是:将括号序列的后$k$个数放到括号序列的最前面,就是长度为$k$的圈.(看了好久题意emm ...
- oracle创建表示例
create table wf_message_weixinqun(dizhi VARCHAR2(200) not null, weixinnicheng VARCHAR2(6) not null,w ...
- linux 编程头文件搜索规则
包含头文件有两种写法,分别是:#include <stdio.h>#include "stdio.h" <>和""分别表示搜索位置的方式 ...
- HDU 1159 Common Subsequence (动态规划、最长公共子序列)
Common Subsequence Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Other ...