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 BeautifulSoup中文乱码问题的2种解决方法
Apr 22 Python
Python中getattr函数和hasattr函数作用详解
Jun 14 Python
python常见排序算法基础教程
Apr 13 Python
python使用matplotlib绘图时图例显示问题的解决
Apr 27 Python
Python实现简单的用户交互方法详解
Sep 25 Python
python实现整数的二进制循环移位
Mar 08 Python
基于Python打造账号共享浏览器功能
May 30 Python
python绘制多个子图的实例
Jul 07 Python
利用Python检测URL状态
Jul 31 Python
python匿名函数的使用方法解析
Oct 10 Python
Python如何批量生成和调用变量
Nov 21 Python
使用python绘制横竖条形图
Apr 21 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
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
apache php mysql开发环境安装教程
2016/07/28 PHP
gearman管理工具GearmanManager的安装与php使用方法示例
2020/02/27 PHP
jquery ui 1.7 ui.tabs 动态添加与关闭(按钮关闭+双击关闭)
2010/04/01 Javascript
js 判断checkbox是否选中的实现代码
2010/11/23 Javascript
如何确保JavaScript的执行顺序 之jQuery.html深度分析
2011/03/03 Javascript
js arguments对象应用介绍
2012/11/28 Javascript
完美兼容各大浏览器的jQuery仿新浪图文淡入淡出间歇滚动特效
2014/11/12 Javascript
javascript带回调函数的异步脚本载入方法实例分析
2015/07/02 Javascript
Boostrap入门准备之border box
2016/05/09 Javascript
详解vue-cli官方脚手架配置
2018/07/20 Javascript
可能被忽略的一些JavaScript数组方法细节
2019/02/28 Javascript
JavaScript内置对象math,global功能与用法实例分析
2019/06/10 Javascript
js定义类的方法示例【ES5与ES6】
2019/07/30 Javascript
创建nuxt.js项目流程图解
2020/03/13 Javascript
[05:23]DOTA2-DPC中国联赛2月1日Recap集锦
2021/03/11 DOTA
详解Python中dict与set的使用
2015/08/10 Python
Python脚本实现虾米网签到功能
2016/04/12 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
你所不知道的Python奇技淫巧13招【实用】
2016/12/14 Python
python之PyMongo使用总结
2017/05/26 Python
解决pycharm界面不能显示中文的问题
2018/05/23 Python
python得到单词模式的示例
2018/10/15 Python
python实现自动化报表功能(Oracle/plsql/Excel/多线程)
2019/12/02 Python
基于Python实现扑克牌面试题
2019/12/11 Python
Python logging模块handlers用法详解
2020/08/14 Python
html5标记文字_动力节点Java学院整理
2017/07/11 HTML / CSS
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
《会变的花树叶》教学反思
2014/02/10 职场文书
事业单位竞聘上岗实施方案
2014/03/28 职场文书
员工工作表现评语
2014/04/26 职场文书
2014年学雷锋活动总结
2014/06/26 职场文书
干部作风建设工作总结
2014/10/29 职场文书
《藏戏》教学反思
2016/02/23 职场文书
《月歌。》宣布制作10周年纪念剧场版《RABBITS KINGDOM THE MOVIE》
2022/04/02 日漫
一级电子管军用接收机测评
2022/04/05 无线电