一、前言:

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 代码

生成如下结构

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使用thrift教程的方法示例

本文地址: http://www.cppcns.com/jiaoben/python/255034.html

python怎么引入thrift文件_python使用thrift教程的方法示例相关推荐

  1. python bottle 上传文件_python bottle安装教程

    教程 本教程会向你介绍 Bottle web框架的概念和功能,覆盖了一些基本和高级的主题. 你可以从头到尾通读,或是在以后用到时,当作参考手册.同时,你也许会对自动生成的API参考手册感兴趣.它覆盖了 ...

  2. python去重且顺序不变_Python实现嵌套列表去重方法示例

    发现问题 python嵌套列表大家应该都不陌生,但最近遇到了一个问题,这是工作中遇到的一个坑,首先看一下问题 raw_list = [["百度", "CPY"] ...

  3. python导入txt文件并绘图-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  4. python读取txt文件代码-Python实现读取txt文件并画三维图简单代码示例

    记忆力差的孩子得勤做笔记! 刚接触python,最近又需要画一个三维图,然后就找了一大堆资料,看的人头昏脑胀的,今天终于解决了!好了,废话不多说,直接上代码! #由三个一维坐标画三维散点 #codin ...

  5. 用Python在Excel里画出蒙娜丽莎的方法示例

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  6. Python实现计算圆周率π的值到任意位的方法示例

    Python实现计算圆周率π的值到任意位的方法示例 本文实例讲述了Python实现计算圆周率π的值到任意位的方法.分享给大家供大家参考,具体如下: 一.需求分析 输入想要计算到小数点后的位数,计算圆周 ...

  7. python如何实现下载文件_python实现下载文件的三种方法

    python实现下载文件的三种方法 Python开发中时长遇到要下载文件的情况,最常用的方法就是通过Http利用urllib或者urllib2模块. 当然你也可以利用ftplib从ftp站点下载文件. ...

  8. python怎么发送代码文件_python 通过 socket 发送文件的实例代码

    目录结构: client: #!/usr/bin/env python # -*-coding:utf-8 -*- import socket, struct, json download_dir = ...

  9. python扫描目录下文件_Python扫描目录读取文件,不考虑子目录

    这篇文章主要为大家详细介绍了Python扫描目录读取文件,不考虑子目录,具有一定的参考价值,可以用来参考一下. 感兴趣Python扫描目录读取文件,不考虑子目录的小伙伴,下面一起跟随512笔记的小编罗 ...

最新文章

  1. Hibernate中sessoin的flush学习笔记
  2. rust大油井频率怎么用_数据量大怎么搞?当然是用这个了!
  3. java url 根域名_php中取得URL的根域名的代码
  4. 计算机科学导论 第4版,计算机科学导论.第4版
  5. Consul 服务注册中心
  6. 找新房子需要考虑的因素
  7. 文件存储的原理和记事本打开文件的原理
  8. Exynos4412 内核移植(四)—— MMU 相关知识解析
  9. leveldb使用指南
  10. 使用7zip把jre集成到绿色运行程序内
  11. 基于GDAL的一个通用的3×3模板函数
  12. 51最小系统板+STC89C52芯片流水灯
  13. install sql server 2016 Error code 0x84B20001
  14. Java实现家庭记账软件(文本界面)
  15. JS undefined报错
  16. 笔记存储仓库神器->印象笔记的使用方法
  17. Oracle数据库学习--2个不错的网站
  18. GA(遗传算法) 解决TSP问题 Python实现
  19. python中sha1 md5等用法
  20. ROS机器人操作系统资料与资讯(2018年8月)

热门文章

  1. AngularJS 动态模板
  2. 管理大数据存储的十大技巧
  3. 如何修改MySQL已有表的字符集
  4. 【Ajax技术】解决XHR与中文乱码问题
  5. CS106A编程方法学二
  6. What we learn before born?
  7. informix mysql,Informix相当于mysql的SHOW CREATE TABLE
  8. mysql5.715 安装在d盘_MySQL-5.7.15安装步骤
  9. 掩膜裁剪tif步骤_使用Arcgis掩膜剪裁工具剪裁全球气候数据为我国范围,并转换为ASC格式...
  10. css修改layui的下拉框样式 js_layui的安装以及简单操作