python使用thrift教程的方法示例


Posted in Python onMarch 21, 2019

一、前言:  

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 代码

python使用thrift教程的方法示例

生成如下结构

python使用thrift教程的方法示例

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 相关文章推荐
Python中装饰器的一个妙用
Feb 08 Python
Python实现的Excel文件读写类
Jul 30 Python
Django中反向生成models.py的实例讲解
May 30 Python
Python操作SQLite/MySQL/LMDB数据库的方法
Nov 07 Python
在python中做正态性检验示例
Dec 09 Python
jupyter notebook中新建cell的方法与快捷键操作
Apr 22 Python
如何基于windows实现python定时爬虫
May 01 Python
python+django+selenium搭建简易自动化测试
Aug 19 Python
Python使用lambda抛出异常实现方法解析
Aug 20 Python
python 如何使用find和find_all爬虫、找文本的实现
Oct 16 Python
pycharm2020.1.2永久破解激活教程,实测有效
Oct 29 Python
python中PyQuery库用法分享
Jan 15 Python
在Python中如何传递任意数量的实参的示例代码
Mar 21 #Python
详解python使用turtle库来画一朵花
Mar 21 #Python
python中import与from方法总结(推荐)
Mar 21 #Python
python批量创建指定名称的文件夹
Mar 21 #Python
python根据txt文本批量创建文件夹
Dec 08 #Python
python+os根据文件名自动生成文本
Mar 21 #Python
Python----数据预处理代码实例
Mar 20 #Python
You might like
BBS(php & mysql)完整版(三)
2006/10/09 PHP
php Rename 更改文件、文件夹名称
2011/05/24 PHP
php中使用接口实现工厂设计模式的代码
2012/06/17 PHP
Thinkphp将二维数组变为标签适用的一维数组方法总结
2014/10/30 PHP
一个JS翻页效果
2007/07/23 Javascript
在IE,Firefox,Safari,Chrome,Opera浏览器上调试javascript
2008/12/02 Javascript
点击文章内容处弹出页面代码
2009/10/01 Javascript
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
2009/12/04 Javascript
jquery $(document).ready() 与window.onload的区别
2009/12/28 Javascript
TextArea设置MaxLength属性最大输入值的js代码
2012/12/21 Javascript
在jQuery中 常用的选择器介绍
2013/04/16 Javascript
分享9个最好用的JavaScript开发工具和代码编辑器
2015/03/24 Javascript
javascript创建对象的几种模式介绍
2016/05/06 Javascript
通过jquery-ui中的sortable来实现拖拽排序的简单实例
2016/05/24 Javascript
JS操作JSON方法总结(推荐)
2016/06/14 Javascript
angularJS+requireJS实现controller及directive的按需加载示例
2017/02/20 Javascript
es6学习之解构时应该注意的点
2017/08/29 Javascript
vue.js中proxyTable 转发请求的实现方法
2018/09/20 Javascript
小程序实现分类页
2019/07/12 Javascript
小程序分享链接onShareAppMessage的具体用法
2020/05/22 Javascript
vue中解决微信html5原生ios虚拟键返回不刷新问题
2020/10/20 Javascript
[01:32]完美世界DOTA2联赛10月29日精彩集锦
2020/10/30 DOTA
在服务器端实现无间断部署Python应用的教程
2015/04/16 Python
在Python中Dataframe通过print输出多行时显示省略号的实例
2018/12/22 Python
python中线程和进程有何区别
2020/06/17 Python
如何用python批量调整视频声音
2020/12/22 Python
Python数据模型与Python对象模型的相关总结
2021/01/26 Python
详解css3 Transition属性(平滑过渡菜单栏案例)
2017/09/05 HTML / CSS
中国综合性网上购物商城:当当(网上卖书起家)
2016/11/16 全球购物
Ref与out有什么不同
2012/11/24 面试题
二手车转让协议书
2015/01/29 职场文书
2015年学校后勤工作总结
2015/04/08 职场文书
2019送给家人们的中秋节祝福语
2019/08/15 职场文书
提升Nginx性能的一些建议
2021/03/31 Servers
Python爬取某拍短视频
2021/06/11 Python
Python排序算法之插入排序及其优化方案详解
2021/06/11 Python