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 相关文章推荐
Flask SQLAlchemy一对一,一对多的使用方法实践
Feb 10 Python
python练习程序批量修改文件名
Jan 16 Python
python实现每次处理一个字符的三种方法
Oct 09 Python
Python生成不重复随机值的方法
May 11 Python
使用C#配合ArcGIS Engine进行地理信息系统开发
Feb 19 Python
Python实现简单的HttpServer服务器示例
Sep 25 Python
Python实现的计数排序算法示例
Nov 29 Python
tensorflow入门之训练简单的神经网络方法
Feb 26 Python
Python爬虫框架Scrapy常用命令总结
Jul 26 Python
Django框架基础模板标签与filter使用方法详解
Jul 23 Python
opencv3/C++ 平面对象识别&透视变换方式
Dec 11 Python
python从Oracle读取数据生成图表
Oct 14 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
建立文件交换功能的脚本(一)
2006/10/09 PHP
php中的数组操作函数整理
2008/08/18 PHP
PHP数组与对象之间使用递归实现转换的方法
2015/06/24 PHP
javascript 获取iframe里页面中元素值的方法
2014/02/17 Javascript
jQuery通过点击行来删除HTML表格行的实现示例
2014/09/10 Javascript
jQuery检测输入的字符串包含的中英文的数量
2015/04/17 Javascript
JavaScript中的toUTCString()方法使用详解
2015/06/12 Javascript
详解AngularJS中自定义过滤器
2015/12/28 Javascript
从零开始学习Node.js系列教程之基于connect和express框架的多页面实现数学运算示例
2017/04/13 Javascript
Angular 4依赖注入学习教程之ValueProvider的使用(七)
2017/06/04 Javascript
使用jQuery实现两个div中按钮互换位置的实例代码
2017/09/21 jQuery
vue 实现v-for循环回来的数据动态绑定id
2019/11/07 Javascript
详解如何修改 node_modules 里的文件
2020/05/22 Javascript
解决Nuxt使用axios跨域问题
2020/07/06 Javascript
vue如何在项目中调用腾讯云的滑动验证码
2020/07/15 Javascript
jQuery实现手风琴特效
2021/01/11 jQuery
[01:17:47]TNC vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
Python读取指定目录下指定后缀文件并保存为docx
2017/04/23 Python
Python实现OpenCV的安装与使用示例
2018/03/30 Python
Python 控制终端输出文字的实例
2019/07/12 Python
python中with语句结合上下文管理器操作详解
2019/12/19 Python
Python实现Canny及Hough算法代码实例解析
2020/08/06 Python
python3中编码获取网页的实例方法
2020/11/16 Python
html5 音乐播放器 audio 标签使用概述
2013/07/15 HTML / CSS
GAP欧盟网上商店:GAP EU
2016/09/13 全球购物
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
软件生产职位结构化面试主要考察要素及面试题库
2015/06/12 面试题
营销人才自我鉴定范文
2013/12/25 职场文书
婚前财产公证书
2014/04/10 职场文书
工伤事故赔偿协议书
2014/04/15 职场文书
领导班子四风对照检查材料思想汇报
2014/09/26 职场文书
《改造我们的学习》心得体会
2014/11/07 职场文书
2021-4-3课程——SQL Server查询【2】
2021/04/05 SQL Server
详解nginx进程锁的实现
2021/06/14 Servers
MySQL对数据表已有表进行分区表的实现
2021/11/01 MySQL