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在多玩图片上下载妹子图的实现代码
Aug 13 Python
Python的Django框架可适配的各种数据库介绍
Jul 15 Python
python:socket传输大文件示例
Jan 18 Python
Python完成哈夫曼树编码过程及原理详解
Jul 29 Python
python实现图像检索的三种(直方图/OpenCV/哈希法)
Aug 08 Python
python自动分箱,计算woe,iv的实例代码
Nov 22 Python
Python脚本导出为exe程序的方法
Mar 25 Python
python 使用递归的方式实现语义图片分割功能
Jul 16 Python
记一次python 爬虫爬取深圳租房信息的过程及遇到的问题
Nov 24 Python
python实现三种随机请求头方式
Jan 05 Python
用python批量移动文件
Jan 14 Python
详解Python flask的前后端交互
Mar 31 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实现支持CURL字符串证书传输的方法
2019/03/23 PHP
js常用函数 不错
2006/09/08 Javascript
jquery实现将获取的颜色值转换为十六进制形式的方法
2014/12/20 Javascript
原生js结合html5制作小飞龙的简易跳球
2015/03/30 Javascript
jQuery animate和CSS3相结合实现缓动追逐效果附源码下载
2016/04/18 Javascript
Agularjs妙用双向数据绑定实现手风琴效果
2017/05/26 Javascript
JS内部事件机制之单线程原理
2018/07/02 Javascript
jQuery中DOM操作原则实例分析
2019/08/01 jQuery
vue-cli3+typescript新建一个项目的思路分析
2019/08/06 Javascript
[46:49]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.19
2020/12/24 DOTA
在Linux上安装Python的Flask框架和创建第一个app实例的教程
2015/03/30 Python
Python的Django框架中if标签的相关使用
2015/07/15 Python
python之Character string(实例讲解)
2017/09/25 Python
Python使用re模块正则提取字符串中括号内的内容示例
2018/06/01 Python
pycharm运行和调试不显示结果的解决方法
2018/11/30 Python
Python 一键制作微信好友图片墙的方法
2019/05/16 Python
python图形绘制奥运五环实例讲解
2019/09/14 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
python虚拟环境模块venv使用及示例
2020/03/04 Python
如何使用pandas读取txt文件中指定的列(有无标题)
2020/03/05 Python
python解析xml文件方式(解析、更新、写入)
2020/03/05 Python
python获取本周、上周、本月、上月及本季的时间代码实例
2020/09/08 Python
Python使用for生成列表实现过程解析
2020/09/22 Python
在IE6系列等老式浏览器中使用HTML5的新标签实现方案
2012/12/25 HTML / CSS
罗兰·穆雷官网:Roland Mouret
2018/09/28 全球购物
全球才华横溢工匠的家居装饰、珠宝和礼物:NOVICA
2021/01/22 全球购物
澳大利亚领先的时尚内衣零售商:Bras N Things
2020/07/28 全球购物
大三预备党员入党思想汇报
2014/01/08 职场文书
预备党员政审材料
2014/02/04 职场文书
协议书与合同的区别
2014/04/18 职场文书
统计学教授推荐信
2014/09/18 职场文书
商务邀请函
2015/01/30 职场文书
行政主管岗位职责范本
2015/04/09 职场文书
协议书格式模板
2016/03/24 职场文书
2019年年中职场激励人心语录30条
2019/08/07 职场文书
golang为什么要统一错误处理
2022/04/03 Golang