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的dict,set,list,tuple应用详解
Jul 24 Python
python随机生成指定长度密码的方法
Apr 04 Python
使用Python下的XSLT API进行web开发的简单教程
Apr 15 Python
python动态参数用法实例分析
May 25 Python
插入排序_Python与PHP的实现版(推荐)
May 11 Python
使用Python爬了4400条淘宝商品数据,竟发现了这些“潜规则”
Mar 23 Python
python判断输入日期为第几天的实例
Nov 13 Python
kali中python版本的切换方法
Jul 11 Python
Python生命游戏实现原理及过程解析(附源代码)
Aug 01 Python
基于python使用tibco ems代码实例
Dec 20 Python
python基础之while循环语句的使用
Apr 20 Python
Python 制作自动化翻译工具
Apr 25 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的RBAC(基于角色权限控制)深入解析
2013/06/17 PHP
Yii2如何批量添加数据
2016/05/17 PHP
Yii中srbac权限扩展模块工作原理与用法分析
2016/07/14 PHP
PHP实现的猴王算法(猴子选大王)示例
2018/04/30 PHP
Laravel等框架模型关联的可用性浅析
2019/12/15 PHP
js实现翻页后保持checkbox选中状态的实现方法
2012/11/03 Javascript
js中onload与onunload的使用示例
2013/08/25 Javascript
javascript实现简单的Map示例介绍
2013/12/23 Javascript
js数字转换为float,取N位小数
2014/02/08 Javascript
ajax提交表单实现网页无刷新注册示例
2014/05/08 Javascript
手机号码,密码正则验证
2014/09/04 Javascript
node.js中使用socket.io制作命名空间
2014/12/15 Javascript
jQuery实现的动态伸缩导航菜单实例
2015/05/07 Javascript
基于JavaScript如何实现ajax调用后台定义的方法
2015/12/29 Javascript
深入理解 JavaScript 中的 JSON
2017/04/06 Javascript
在 Linux/Unix 中不重启 Vim 而重新加载 .vimrc 文件的流程
2018/03/21 Javascript
express默认日志组件morgan的方法
2018/04/05 Javascript
小程序点击图片实现png转jpg
2019/10/22 Javascript
解决包含在label标签下的checkbox在ie8及以下版本点击事件无效果兼容的问题
2019/10/27 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
深入理解Javascript中的this关键字
2015/03/27 Python
关于Python如何避免循环导入问题详解
2017/09/14 Python
Python input函数使用实例解析
2019/11/22 Python
Python matplotlib画曲线例题解析
2020/02/07 Python
Python操作Word批量生成合同的实现示例
2020/08/28 Python
PyTorch 导数应用的使用教程
2020/08/31 Python
Python 内存管理机制全面分析
2021/01/16 Python
Crocs卡骆驰洞洞鞋日本官方网站:Crocs日本
2016/08/25 全球购物
大一期末自我鉴定
2013/12/13 职场文书
法制宣传月活动方案
2014/05/11 职场文书
学校募捐倡议书
2014/05/14 职场文书
二年级语文下册复习计划
2015/01/19 职场文书
综合办公室主任岗位职责
2015/04/01 职场文书
2016年第32个教师节致辞
2015/11/26 职场文书
快消品行业营销模式与盈利模式分享
2019/09/27 职场文书
sql中mod()函数取余数的用法
2021/05/29 SQL Server