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 相关文章推荐
Python3.x和Python2.x的区别介绍
Feb 12 Python
基于python编写的微博应用
Oct 17 Python
Saltstack快速入门简单汇总
Mar 01 Python
Python实现购物系统(示例讲解)
Sep 13 Python
python不换行之end=与逗号的意思及用途
Nov 21 Python
对numpy 数组和矩阵的乘法的进一步理解
Apr 04 Python
Python多线程原理与用法实例剖析
Jan 22 Python
pyqt5 删除layout中的所有widget方法
Jun 25 Python
Django的性能优化实现解析
Jul 30 Python
jupyter notebook 重装教程
Apr 16 Python
用Python爬取LOL所有的英雄信息以及英雄皮肤的示例代码
Jul 13 Python
Python通过字典映射函数实现switch
Nov 06 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验证是否是md5编码的简单代码
2014/04/01 PHP
PHP 实现公历日期与农历日期的互转换
2017/09/13 PHP
php 替换文章中的图片路径,下载图片到本地服务器的方法
2018/02/06 PHP
HTML颜色选择器实现代码
2010/11/23 Javascript
基于JQuery实现的类似购物商城的购物车
2011/12/06 Javascript
js中的onchange和onpropertychange (onchange无效的解决方法)
2014/03/08 Javascript
jquery mobile页面跳转后样式丢失js失效的解决方法
2014/09/06 Javascript
jquery判断输入密码两次是否相等
2020/04/22 Javascript
JavaScript黑洞数字之运算路线查找算法(递归算法)实例
2016/01/28 Javascript
浅谈html转义及防止javascript注入攻击的方法
2016/12/04 Javascript
easyui-datagrid开发实践(总结)
2017/08/02 Javascript
关于vue面试题汇总
2018/03/20 Javascript
Vue2.0 实现单选互斥的方法
2018/04/13 Javascript
JS对象与json字符串相互转换实现方法示例
2018/06/14 Javascript
vue实现文件上传功能
2018/08/13 Javascript
详解关于表格合并span-method方法的补充(表格数据由后台动态返回)
2019/05/21 Javascript
[01:03:59]2018DOTA2亚洲邀请赛3月30日 小组赛B组VGJ.T VS Secret
2018/03/31 DOTA
wxPython的安装与使用教程
2018/08/31 Python
python 解压pkl文件的方法
2018/10/25 Python
python 实现返回一个列表中出现次数最多的元素方法
2019/06/11 Python
Python 占位符的使用方法详解
2019/07/10 Python
PyQt5多线程刷新界面防假死示例
2019/12/13 Python
css3.0 图形构成实例练习二
2013/03/19 HTML / CSS
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
海量信息软件测试笔试题
2015/08/08 面试题
如果让你测试一台高速激光打印机,你都会进行哪些测试
2012/12/04 面试题
护理专业毕业生推荐信
2013/10/31 职场文书
物业保安员岗位职责制度
2014/01/30 职场文书
税务会计岗位职责
2014/02/18 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
校园联欢晚会主持词
2014/03/17 职场文书
村级干部党员公开承诺事项
2015/05/04 职场文书
2015年惩防体系建设工作总结
2015/05/22 职场文书
职业生涯规划书之大学四年
2019/08/07 职场文书
导游词之泉州崇武古城
2019/12/20 职场文书
python urllib库的使用详解
2021/04/13 Python