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编程中的反模式实例分析
Dec 08 Python
Python创建二维数组实例(关于list的一个小坑)
Nov 07 Python
Python实现比较扑克牌大小程序代码示例
Dec 06 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
PyQt5 pyqt多线程操作入门
May 05 Python
pandas修改DataFrame列名的实现方法
Feb 22 Python
纯python进行矩阵的相乘运算的方法示例
Jul 17 Python
python多环境切换及pyenv使用过程详解
Sep 27 Python
解决pycharm启动后总是不停的updating indices...indexing的问题
Nov 27 Python
Python 实现PS滤镜的旋涡特效
Dec 03 Python
python实现腾讯滑块验证码识别
Apr 27 Python
使用Python+OpenCV进行卡类型及16位卡号数字的OCR功能
Aug 30 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
《OVERLORD》第四季,终于等到你!
2020/03/02 日漫
php自动获取字符串编码函数mb_detect_encoding
2011/05/31 PHP
ThinkPHP内置jsonRPC的缺陷分析
2014/12/18 PHP
php缓冲输出实例分析
2015/01/05 PHP
PHP添加图片水印、压缩、剪切的封装类
2015/08/17 PHP
thinkPHP+PHPExcel实现读取文件日期的方法(含时分秒)
2016/07/07 PHP
php 三元运算符实例详细介绍
2016/12/15 PHP
Laravel实现表单提交
2017/05/07 PHP
用JavaScript仿PS里的羽化效果代码
2011/12/20 Javascript
JavaScript禁止页面操作的示例代码
2013/12/17 Javascript
jQuery 中$(this).index与$.each的使用指南
2014/11/20 Javascript
JavaScript基础函数整理汇总
2015/01/30 Javascript
JavaScript入门基础
2015/08/12 Javascript
javascript闭包概念简单解析(推荐)
2016/06/03 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
node.js实现快速截图
2016/08/27 Javascript
JavaScript中的"=、==、==="区别讲解
2019/01/22 Javascript
小程序实现左滑删除效果
2019/07/25 Javascript
JS常见面试试题总结【去重、遍历、闭包、继承等】
2019/08/27 Javascript
微信小程序实现滑动操作代码
2020/04/23 Javascript
[02:11]DOTA2上海特级锦标赛主赛事第二日RECAP
2016/03/04 DOTA
Python文档生成工具pydoc使用介绍
2015/06/02 Python
Python定时发送消息的脚本:每天跟你女朋友说晚安
2018/10/21 Python
Python爬虫与反爬虫大战
2020/07/30 Python
欧洲第一中国智能手机和平板电脑网上商店:CECT-SHOP
2018/01/08 全球购物
美国室内盆栽植物购买网站:Plants.com
2020/04/24 全球购物
经典优秀个人求职自荐信格式
2013/09/25 职场文书
陈欧广告词
2014/03/14 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
社区志愿者培训方案
2014/06/10 职场文书
大二学生自我检讨书
2014/10/23 职场文书
读《钢铁是怎样炼成的》有感:百炼方成钢
2019/11/05 职场文书
Java 实战项目之家居购物商城系统详解流程
2021/11/11 Java/Android
Redis中缓存穿透/击穿/雪崩问题和解决方法
2021/12/04 Redis
vue-cil之axios的二次封装与proxy反向代理使用说明
2022/04/07 Vue.js
MySQL视图概念以及相关应用
2022/04/19 MySQL