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使用in操作符时元组和数组的区别分析
May 19 Python
Python实现的快速排序算法详解
Aug 01 Python
Python实现读写INI配置文件的方法示例
Jun 09 Python
Anaconda2下实现Python2.7和Python3.5的共存方法
Jun 11 Python
Windows下Anaconda2安装NLTK教程
Sep 19 Python
使用matplotlib中scatter方法画散点图
Mar 19 Python
WxPython实现无边框界面
Nov 18 Python
python无序链表删除重复项的方法
Jan 17 Python
python调用私有属性的方法总结
Jul 24 Python
matplotlib绘制正余弦曲线图的实现
Feb 22 Python
python如何获取网络数据
Apr 11 Python
Python 处理表格进行成绩排序的操作代码
Jul 26 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
跟我学小偷程序之成功偷取首页(第三天)
2006/10/09 PHP
PHP中::、->、self、$this几种操作符的区别介绍
2013/04/24 PHP
PHPThumb图片处理实例
2014/05/03 PHP
php实现用已经过去多长时间的方式显示时间
2015/06/05 PHP
人脸识别测颜值、测脸龄、测相似度微信接口
2016/04/07 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
thinkphp分页实现效果
2016/10/13 PHP
php简单计算年龄的方法(周岁与虚岁)
2016/12/06 PHP
用ADODB.Stream转换
2007/01/22 Javascript
Javascript条件判断使用小技巧总结
2008/09/08 Javascript
仿迅雷焦点广告效果(JQuery版)
2008/11/19 Javascript
jQuery UI设置固定日期选择特效代码分享
2015/08/27 Javascript
解析NodeJS异步I/O的实现
2017/04/13 NodeJs
详解使用React进行组件库开发
2018/02/06 Javascript
用python写asp详细讲解
2013/12/16 Python
python中import学习备忘笔记
2017/01/24 Python
Python对字符串实现去重操作的方法示例
2017/08/11 Python
Python+Pandas 获取数据库并加入DataFrame的实例
2018/07/25 Python
Python 实现「食行生鲜」签到领积分功能
2018/09/26 Python
django的csrf实现过程详解
2019/07/26 Python
用Python调用win命令行提高工作效率的实例
2019/08/14 Python
python是否适合网页编程详解
2019/10/04 Python
Django 实现 Websocket 广播、点对点发送消息的代码
2020/06/03 Python
python正则表达式 匹配反斜杠的操作方法
2020/08/07 Python
Python django框架 web端视频加密的实例详解
2020/11/20 Python
HTML5+CSS设置浮动却没有动反而在中间且错行的问题
2020/05/26 HTML / CSS
实习生的自我鉴定范文欣赏
2013/11/20 职场文书
餐饮业会计岗位职责
2013/12/19 职场文书
优秀高中生事迹材料
2014/02/11 职场文书
音乐教学随笔感言
2014/02/19 职场文书
给校长的建议书
2014/03/12 职场文书
《美丽的南沙群岛》教学反思
2014/04/27 职场文书
公司领导班子群众路线四风问题对照检查材料
2014/10/02 职场文书
中学生自我评价范文
2015/03/03 职场文书
OpenCV中resize函数插值算法的实现过程(五种)
2021/06/05 Python
MySQL count(*)统计总数问题汇总
2022/09/23 MySQL