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编写一个模仿CPU工作的程序
Apr 16 Python
如何使用python爬取csdn博客访问量
Feb 14 Python
Python中操作符重载用法分析
Apr 29 Python
python 使用get_argument获取url query参数
Apr 28 Python
Python cookbook(数据结构与算法)将序列分解为单独变量的方法
Feb 13 Python
Python将一个CSV文件里的数据追加到另一个CSV文件的方法
Jul 04 Python
PyTorch读取Cifar数据集并显示图片的实例讲解
Jul 27 Python
Python函数定义及传参方式详解(4种)
Mar 18 Python
实例详解Python模块decimal
Jun 26 Python
python list数据等间隔抽取并新建list存储的例子
Nov 27 Python
python实现矩阵和array数组之间的转换
Nov 29 Python
浅谈keras使用预训练模型vgg16分类,损失和准确度不变
Jul 02 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/11/25 PHP
php发送html格式文本邮件的方法
2015/06/10 PHP
jQuery1.6 使用方法二
2011/11/23 Javascript
分享8款优秀的 jQuery 加载动画和进度条插件
2012/10/24 Javascript
原生javaScript做得动态表格(注释写的很清楚)
2013/12/29 Javascript
ExtJS4如何给同一个formpanel不同的url
2014/05/02 Javascript
node.js中的fs.lstat方法使用说明
2014/12/16 Javascript
jquery通过ajax加载一段文本内容的方法
2015/01/15 Javascript
浅谈JavaScript中Date(日期对象),Math对象
2015/02/05 Javascript
jquery validate.js表单验证入门实例(附源码)
2015/11/10 Javascript
解决layui使用layui-icon出现默认图标的问题
2019/09/11 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
[46:04]Liquid vs VP Supermajor决赛 BO 第四场 6.10
2018/07/05 DOTA
pycharm 使用心得(六)进行简单的数据库管理
2014/06/06 Python
Python中的tuple元组详细介绍
2015/02/02 Python
在Python中使用Mako模版库的简单教程
2015/04/08 Python
在Python的框架中为MySQL实现restful接口的教程
2015/04/08 Python
浅谈Python中的作用域规则和闭包
2018/03/20 Python
Python OpenCV利用笔记本摄像头实现人脸检测
2020/08/20 Python
基于Python打造账号共享浏览器功能
2019/05/30 Python
Python 使用指定的网卡发送HTTP请求的实例
2019/08/21 Python
pycharm 2019 最新激活方式(pycharm破解、激活)
2020/09/22 Python
Python编写单元测试代码实例
2020/09/10 Python
CSS3系列之3D制作方法案例
2017/08/14 HTML / CSS
Pandora德国官网:购买潘多拉手链、戒指、项链和耳环
2020/02/20 全球购物
俄罗斯电动工具和设备购物网站:Vseinstrumenti.ru
2020/11/12 全球购物
华三通信H3C面试题
2015/05/15 面试题
毕业生机械建模求职信
2013/10/14 职场文书
毕业留言寄语大全
2014/04/10 职场文书
班级文化建设标语
2014/06/23 职场文书
法院干警四风问题自我剖析材料
2014/09/29 职场文书
学生检讨书如何写
2014/10/30 职场文书
青年岗位能手事迹材料
2014/12/23 职场文书
2015年学校管理工作总结
2015/07/20 职场文书
windows安装python超详细图文教程
2021/05/21 Python
python pygame入门教程
2021/06/01 Python