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类继承用法实例分析
Oct 10 Python
Centos5.x下升级python到python2.7版本教程
Feb 14 Python
浅谈Python中函数的参数传递
Jun 21 Python
Python中函数eval和ast.literal_eval的区别详解
Aug 10 Python
Python把csv数据写入list和字典类型的变量脚本方法
Jun 15 Python
pandas筛选某列出现编码错误的解决方法
Nov 07 Python
python图像和办公文档处理总结
May 28 Python
解决ROC曲线画出来只有一个点的问题
Feb 28 Python
python + selenium 刷B站播放量的实例代码
Jun 12 Python
python中的时区问题
Jan 14 Python
Python列表删除重复元素与图像相似度判断及删除实例代码
May 07 Python
PyCharm 配置SSH和SFTP连接远程服务器
May 11 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
php弹出对话框实现重定向代码
2014/01/23 PHP
PHP快速按行读取CSV大文件的封装类分享(也适用于其它超大文本文件)
2014/04/10 PHP
php上传图片之时间戳命名(保存路径)
2014/08/15 PHP
php简单实现短网址(短链)还原的方法(测试可用)
2016/05/09 PHP
解读PHP中上传文件的处理问题
2016/05/29 PHP
PHP isset()与empty()的使用区别详解
2017/02/10 PHP
ThinkPHP实现图片上传操作的方法详解
2017/05/08 PHP
js模拟select下拉菜单控件的代码
2013/05/08 Javascript
JavaScript回调(callback)函数概念自我理解及示例
2013/07/04 Javascript
JS基于HTML5的canvas标签实现炫目的色相球动画效果实例
2016/08/24 Javascript
js实现html table 行,列锁定的简单实例
2016/10/13 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
Python动态加载模块的3种方法
2014/11/22 Python
深入学习Python中的装饰器使用
2016/06/20 Python
Python cookbook(数据结构与算法)从任意长度的可迭代对象中分解元素操作示例
2018/02/13 Python
Python读取数据集并消除数据中的空行方法
2018/07/12 Python
使用python批量读取word文档并整理关键信息到excel表格的实例
2018/11/07 Python
Python使用post及get方式提交数据的实例
2019/01/24 Python
PyQt5图形界面播放音乐的实例
2019/06/17 Python
Python 的AES加密与解密实现
2019/07/09 Python
解决Django加载静态资源失败的问题
2019/07/28 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
浅谈keras通过model.fit_generator训练模型(节省内存)
2020/06/17 Python
印尼值得信赖的在线交易网站:Bukalapak
2019/03/11 全球购物
艺术系大学生毕业个人自我评价
2013/09/19 职场文书
司机的工作范围及职责
2013/11/13 职场文书
毕业自我评价范文
2013/11/17 职场文书
商务英语求职自荐信范文
2013/12/24 职场文书
年度安全生产目标责任书
2014/07/23 职场文书
2014年党的群众路线整改措施思想汇报
2014/10/12 职场文书
工作收入证明范本
2015/06/12 职场文书
医务人员医德医风心得体会
2016/01/25 职场文书
研究生学习计划书应该怎么写?
2019/09/10 职场文书
vue使用v-model进行跨组件绑定的基本实现方法
2021/04/28 Vue.js
Python游戏开发实例之graphics实现AI五子棋
2021/11/01 Python