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实现删除文件但保留指定文件
Jun 21 Python
一个基于flask的web应用诞生 flask和mysql相连(4)
Apr 11 Python
Python实现的递归神经网络简单示例
Aug 11 Python
Python标准模块--ContextManager上下文管理器的具体用法
Nov 27 Python
对Python中创建进程的两种方式以及进程池详解
Jan 14 Python
PyQt5显示GIF图片的方法
Jun 17 Python
如何用Python 加密文件
Sep 10 Python
python 绘制正态曲线的示例
Sep 24 Python
Python批量删除mysql中千万级大量数据的脚本分享
Dec 03 Python
python 6种方法实现单例模式
Dec 15 Python
如何用python 操作zookeeper
Dec 28 Python
Python获取字典中某个key的value
Apr 13 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输入流php://input介绍
2012/09/18 PHP
PHP调用MsSQL Server 2012存储过程获取多结果集(包含output参数)的详解
2013/07/03 PHP
php实现的简单日志写入函数
2015/03/31 PHP
php实现SAE上使用storage上传与下载文件的方法
2015/06/29 PHP
PHPStrom中实用的功能和快捷键大全
2015/09/23 PHP
详解WordPress开发中过滤属性以及Sql语句的函数使用
2015/12/25 PHP
PHP pear安装配置教程
2016/05/14 PHP
Laravel SQL语句记录方式(推荐)
2016/05/26 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
2019/04/23 PHP
javascript优先加载笔记代码
2008/09/30 Javascript
Node.js巧妙实现Web应用代码热更新
2015/10/22 Javascript
使用vue.js实现联动效果的示例代码
2017/01/10 Javascript
JS和jQuery通过this获取html标签中的属性值(实例代码)
2017/09/11 jQuery
详解Vue 全局引入bass.scss 处理方案
2018/03/26 Javascript
vue+webpack 更换主题N种方案优劣分析
2019/10/28 Javascript
python不换行之end=与逗号的意思及用途
2017/11/21 Python
Python对excel文档的操作方法详解
2018/12/10 Python
python 同时运行多个程序的实例
2019/01/07 Python
Python中的 enum 模块源码详析
2019/01/09 Python
Python3.6.x中内置函数总结及讲解
2019/02/22 Python
python ---lambda匿名函数介绍
2019/03/13 Python
Pytorch卷积层手动初始化权值的实例
2019/08/17 Python
wxPython实现文本框基础组件
2019/11/18 Python
Python matplotlib以日期为x轴作图代码实例
2019/11/22 Python
Python3.6安装卸载、执行命令、执行py文件的方法详解
2020/02/20 Python
对Matlab中共轭、转置和共轭装置的区别说明
2020/05/11 Python
详解python百行有效代码实现汉诺塔小游戏(简约版)
2020/10/30 Python
Python系统公网私网流量监控实现流程
2020/11/23 Python
美国大城市最热门旅游景点门票:CityPASS
2016/12/16 全球购物
美丽的珠宝配饰:SmallThings
2019/09/04 全球购物
运动会邀请函范文
2014/01/31 职场文书
《乡愁》教学反思
2014/02/18 职场文书
《李广射虎》教学反思
2014/04/27 职场文书
项目安全员岗位职责
2015/02/15 职场文书
2019预备党员转正申请书模板2篇!
2019/08/07 职场文书
Java实现斗地主之洗牌发牌
2021/06/14 Java/Android