python怎么引入thrift文件_python使用thrift教程的方法示例
一、前言:
Thrift 是一种接口描述语言和二进制通信协议。以前也没接触过,最近有个项目需要建立自动化测试,这个项目之间的微服务都是通过 Thrift 进行通信的,然后写自动化脚本之前研究了一下。
需要定义一个xxx.thrift的文件, 来生成各种语言的代码,生成之后我们的服务提供者和消费者,都需要把代码引入,服务端把代码实现,消费者直接使用API的存根,直接调用。
和 http 相比,同属于应用层,走 tcp 协议。Thrift 优势在于发送同样的数据,request包 和 response包 要比 http 小很多,在整体性能上要优于 http 。
二、使用方法
环境准备:
从官网上下载 windows 版的 thrift.exe:http://archive.apache.org/dist/thrift/0.9.3/(我这里用的是0.9.3版本)
python版本:Python 3.7.1
pip3 install thrift
1.首先使用 thrift 之前需要定义一个 .thrift 格式的文件,比如 test.thrift
service Transmit {
string sayMsg(1:string msg);
string invoke(1:i32 cmd 2:string token 3:string data)
}
然后运行命令:thrift-0.9.3.exe -gen py test.thrift 生成 python 代码
生成如下结构
2.然后将生成的 python 代码 和 文件,放到新建的 python 项目中。完成后先运行服务器代码。
服务端代码 server.py:
import json
from test import Transmit
from test.ttypes import *
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer
import socket
class TransmitHandler:
def __init__(self):
self.log = {}
def sayMsg(self, msg):
msg = json.loads(msg)
print("sayMsg(" + msg + ")")
return "say " + msg + " from " + socket.gethostbyname(socket.gethostname())
def invoke(self,cmd,token,data):
cmd = cmd
token =token
data = data
if cmd ==1:
return json.dumps({token:data})
else:
return 'cmd不匹配'
if __name__=="__main__":
handler = TransmitHandler()
processor = Transmit.Processor(handler)
transport = TSocket.TServerSocket('127.0.0.1', 8000)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()
server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)
print("Starting python server...")
server.serve()
客户端代码 client.py
import sys
import jsonfrom test import Transmit
from test.ttypes import *
from test.constants import *
from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
transport = TSocket.TSocket('127.0.0.1', 8000)
transport = TTransport.TBufferedTransport(transport)
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Transmit.Client(protocol)
# Connect!
transport.open()
cmd = 2
token = '1111-2222-3333-4444'
data = json.dumps({"name":"zhoujielun"})
msg = client.invoke(cmd,token,data)
print(msg)
transport.close()
# 执行结果:cmd不匹配
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。
本文标题: python使用thrift教程的方法示例
本文地址: http://www.cppcns.com/jiaoben/python/255034.html
python怎么引入thrift文件_python使用thrift教程的方法示例相关推荐
- python bottle 上传文件_python bottle安装教程
教程 本教程会向你介绍 Bottle web框架的概念和功能,覆盖了一些基本和高级的主题. 你可以从头到尾通读,或是在以后用到时,当作参考手册.同时,你也许会对自动生成的API参考手册感兴趣.它覆盖了 ...
- python去重且顺序不变_Python实现嵌套列表去重方法示例
发现问题 python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题 raw_list = [["百度", "CPY"] ...
- python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例
记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...
- python读取txt文件代码-Python实现读取txt文件并画三维图简单代码示例
记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...
- 用Python在Excel里画出蒙娜丽莎的方法示例
更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...
- Python实现计算圆周率π的值到任意位的方法示例
Python实现计算圆周率π的值到任意位的方法示例 本文实例讲述了Python实现计算圆周率π的值到任意位的方法.分享给大家供大家参考,具体如下: 一.需求分析 输入想要计算到小数点后的位数,计算圆周 ...
- python如何实现下载文件_python实现下载文件的三种方法
python实现下载文件的三种方法 Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件. ...
- python怎么发送代码文件_python 通过 socket 发送文件的实例代码
目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = ...
- python扫描目录下文件_Python扫描目录读取文件,不考虑子目录
这篇文章主要为大家详细介绍了Python扫描目录读取文件,不考虑子目录,具有一定的参考价值,可以用来参考一下. 感兴趣Python扫描目录读取文件,不考虑子目录的小伙伴,下面一起跟随512笔记的小编罗 ...
最新文章
- Hibernate中sessoin的flush学习笔记
- rust大油井频率怎么用_数据量大怎么搞?当然是用这个了!
- java url 根域名_php中取得URL的根域名的代码
- 计算机科学导论 第4版,计算机科学导论.第4版
- Consul 服务注册中心
- 找新房子需要考虑的因素
- 文件存储的原理和记事本打开文件的原理
- Exynos4412 内核移植(四)—— MMU 相关知识解析
- leveldb使用指南
- 使用7zip把jre集成到绿色运行程序内
- 基于GDAL的一个通用的3×3模板函数
- 51最小系统板+STC89C52芯片流水灯
- install sql server 2016 Error code 0x84B20001
- Java实现家庭记账软件(文本界面)
- JS undefined报错
- 笔记存储仓库神器->印象笔记的使用方法
- Oracle数据库学习--2个不错的网站
- GA(遗传算法) 解决TSP问题 Python实现
- python中sha1 md5等用法
- ROS机器人操作系统资料与资讯(2018年8月)
热门文章
- AngularJS 动态模板
- 管理大数据存储的十大技巧
- 如何修改MySQL已有表的字符集
- 【Ajax技术】解决XHR与中文乱码问题
- CS106A编程方法学二
- What we learn before born?
- informix mysql,Informix相当于mysql的SHOW CREATE TABLE
- mysql5.715 安装在d盘_MySQL-5.7.15安装步骤
- 掩膜裁剪tif步骤_使用Arcgis掩膜剪裁工具剪裁全球气候数据为我国范围,并转换为ASC格式...
- css修改layui的下拉框样式 js_layui的安装以及简单操作