go调用python3_在python3中使用google的protobuf以及gRPC-Go语言中文社区
下载源代码:地址
安装proto
#下载:protoc-3.9.1-linux-x86_64.zip
unzip protoc-3.9.1-linux-x86_64.zip -d protoc-3.9.1-linux-x86_64 # 解压
mv protoc-3.9.1-linux-x86_64 /usr/local/protoc # 移动
ln -s /usr/local/protoc/bin/protoc /usr/bin/protoc # 建立软连接
protoc --version # 测试
安装python的protof 扩展
protoc-3.9.1-linux-x86_64.zip 3 下载
unzip protobuf-python-3.9.1.zip
cd protobuf-3.9.1/python
python3 setup.py build
python3 setup.py test
python3 setup.py install
pip list # 参考protobuf 3.9.1
定义数据类型
syntax = "proto3";
package tutorial;
message searchRequest {
string query = 1;
int32 page_number = 2;
int32 result_per_page = 3;
enum Corpus {
UNIVERSAL = 0;
WEB = 1;
IMAGES =2;
LOCAL = 3;
NEWS = 4;
PRODUCTS = 5;
VIDEO = 6;
}
Corpus corpus = 4;
}
message Person {
string name = 1;
int32 id = 2;
string email = 3;
enum PhoneType {
HOME = 0;
MOBILE = 1;
WORK = 2;
}
message PhoneNumber {
string number = 1;
PhoneType type = 2;
}
repeated PhoneNumber phones = 4;
}
message AddressBook {
repeated Person people = 1;
}
protoc --python_out=./ ./test.proto # 编译文件
测试案例
from google.protobuf import json_format
from scrapy_crawl.deal.service.proto.test_pb2 import *
person = Person()
person.id = 1
person.name = 'vic'
person.email = '3264245@qq.com'
person.phones.add(number='15901780', type=Person.MOBILE)
print(person.SerializeToString())
person1 = Person()
p1 = person1.ParseFromString(person.SerializeToString())
print(p1)
j1 = json_format.MessageToDict(person1, True)
print(j1)
person2 = Person()
json_format.Parse(json_format.MessageToJson(person1, True), person2)
print(person2)
# 下面是执行结果
b'nx03vicx10x01x1ax0e3264245@qq.com"x0cnx0815901780x10x01'
37
{'name': 'vic', 'id': 1, 'email': '3264245@qq.com', 'phones': [{'number': '15901780', 'type': 'MOBILE'}]}
name: "vic"
id: 1
email: "3264245@qq.com"
phones {
number: "15901780"
type: MOBILE
}
grpc服务
定义test.proto
syntax = "proto3";
package helloworld;
message HelloRequest {
string name = 1;
}
message HelloReply {
string message = 1;
}
service Greeter {
rpc SayHello (HelloRequest) returns (HelloReply) {}
rpc SayHelloAgain(HelloRequest) returns (HelloReply) {}
}
生产gRPC代码
python3 -m grpc_tools.protoc -I . --python_out=. --grpc_python_out=. helloworld.proto
创建server
import time
from concurrent import futures
from scrapy_crawl.deal.service.proto.test_pb2 import *
from scrapy_crawl.deal.service.proto.test_pb2_grpc import *
class Greeter(GreeterServicer):
def SayHello(self, request, context):
return HelloReply(message='hello world, %s' % request.name)
def SayHelloAgain(self, request, context):
return HelloReply(message='hello world, %s' % request.name)
def main():
print("------")
server = grpc.server(futures.ThreadPoolExecutor(max_workers=10))
add_GreeterServicer_to_server(Greeter(), server)
server.add_insecure_port("[::]:50051")
server.start()
try:
while True:
time.sleep(100)
except KeyboardInterrupt:
print("stop")
server.stop(0)
main()
创建client
from scrapy_crawl.deal.service.proto.test_pb2_grpc import *
def run():
channel = grpc.insecure_channel("localhost:50051")
stub = GreeterStub(channel=channel)
r = stub.SayHello(HelloRequest(name='vic'))
print("greeter client received:%s" % r.message)
r = stub.SayHelloAgain(HelloRequest(name='baby'))
print("Greeter client received: %s" % r.message)
run()
错误
test_pb2_grpc 引入了test_pb2文件,是绝对路径引入的,修改为先对路径即可
参考文档:参考1
go调用python3_在python3中使用google的protobuf以及gRPC-Go语言中文社区相关推荐
- python编程小案例_用Python3编程写第一个小案例!-Go语言中文社区
用Python3编程第一步! 今天博主跟大家聊一聊如何使用Python3编程第一步!!不喜勿喷,如有建议欢迎补充.讨论! Come on! 在前面的几篇文章中我们已经学习了一些Python3 的基本语 ...
- kubernetes中mysql乱码_在kubernetes中部署tomcat与mysql集群-Go语言中文社区
在kubernetes中部署tomcat与mysql集群之前必须要有以下这些基础: 1. 已安装.配置kubernetes 2. 集群中有tomcat与mysql容器镜像 3. 有docker基础 具 ...
- java awt run_Java中awt基本组件及其使用方法-Go语言中文社区
1,按钮 此类创建一个标签按钮.当按下该按钮时,应用程序能执行某项动作.它有两种构造方法: public Button() 构造一个标签字符串为空的按钮. public Button(String l ...
- rust的矿坑_转: Rust中的Pin详解 【Rust语言中文社区】
Rust中的Pin详解 原创 automanyang Rust语言中文社区 昨天 https://mp.weixin.qq.com/s/PjctbPbyR5OeaqTHZdB5uQ 相关概念 Pin ...
- vue 调用共众url_vue单页面,在微信公众号支付中遇到的URL未注册BUG解决方法-Go语言中文社区...
今天在做微信公众号支付的时候,遇到一个bug,在当前支付页面点击支付,就会报错,提示当前页面的URL未注册.如下图: 但是,这个URL我们是在后台微信公众号配置了的,所以说不会出错. 但是我们刷新一次 ...
- go 调用winapi_如何在go中调用windows api-Go语言中文社区
1.cgo环境搭建 初入go坑,记录一次工作中需要封装windows api 的过程.既然是go调用C++那么首先要配置cgo的环境了.要使用CGO特性,需要安装C/C++构建工具链,在macOS和L ...
- python集合可以修改吗_修改包含Python3中的集合的集合列表-问答-阿里云开发者社区-阿里云...
我试图创建一个以元组为元素的列表.每个元组都有4个整数.前两个整数是对2个range进行压缩的结果,而其他2个则是对2个不同的整数进行压缩的结果. 我正在使用此代码创建元组和最终列表,这些列表是从笛卡 ...
- shell脚本和python脚本和go脚本的区别_Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例-Go语言中文社区...
NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有: 1)标准输入.标准输出及标准错误输出的接口: child.stdin 获取标准输入 child.stdout 获取标准输出 chi ...
- mac装python3问题_Mac下使用homebrew安装Python3问题-Go语言中文社区
在运行Python项目时需要Python3. 那么就安装Python3,使用homebrew安装,命令如下: brew install python3 安装成功即可使用. 由于不知道什么时候已经安装了 ...
最新文章
- 【原译】在amazon kindle上安装Metasploit
- 【NLP】BERT 模型与中文文本分类实践
- 第1章python基础语法1
- Java FlatMapFunction in Spark: error: is not abstract and does not override abstract method解决方案
- 工业互联网二级节点建设_建设者还是二传手?
- 用SQL实现统计报表中的“小计”和“合计”
- nginx windows启动停止_Nginx之3抛砖引玉 - (目录索引)
- 这台计算机似乎没有安装操作系统_【每日一练】计算机一级考试(一)
- ActiveMQ(4) ActiveMQ JDBC 持久化 Mysql 数据库
- DSP学习(3)—— DSP调试与追踪
- Google退出中国的三大原因和四大后果(转载)
- 常量的分类_基本数据类型
- 桌面应用程序与web应用程序
- 一图看懂RTB广告竞价原理,原来这就是实时竞价
- 计算机工程学院团总支学生会,凝聚团队力量,展现青春活力——计算机工程学院团总支学生会开展学生干部素质拓展活动...
- ubuntu1404 安装 ppsspp
- iOS: UIScrollView的属性zooming
- c++如何批量修改文件后缀名
- windows10 RocketMQ启动 mqbroker 异常
- ChinaJoy揭晓十大网游盗号木马黑榜
热门文章
- ftp服务器复制粘贴文件夹,ftp服务器复制粘贴文件夹
- c++中outtextxy_第12章 坚持一百秒(《C和C++游戏趣味编程》配套教学视频)
- java单纯形法_单纯形法 - fjzzq2002 - 博客园
- linux tcp连接计算机,计算机基础知识——linux socket套接字tcp连接分析
- cat3 utp是不是网线_小科普 | 网线也有高低?聊聊网线的差别
- 机器人码垛手持式编程_FANUC机器人码垛编程讲解
- 腾讯TIM自动回复内容怎么自定义添加
- 怎么禁止开机启动nvidia
- 如何实现多路海康大华等RTSP数据转RTMP推送
- div+css 单行或者多行超出文本,数字,字母长度自动省略