python使用thrift教程的方法示例

 更新时间:2019年03月21日 11:47:55   作者:三只松鼠  
这篇文章主要介绍了python使用thrift教程的方法示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一、前言:  

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 pathlib模块实例详解

    Python pathlib模块实例详解

    本文给大家介绍了Python的pathlib 模块,为 Python 工程师对该模块的使用提供了支撑,让大家了解如何使用 pathlib 模块读写文件、操纵文件路径和基础文件系统,统计目录下的文件类型以及查找匹配目录下某一类型文件等,需要的朋友参考下吧
    2023-05-05
  • 使用Python通过win32 COM打开Excel并添加Sheet的方法

    使用Python通过win32 COM打开Excel并添加Sheet的方法

    今天小编就为大家分享一篇使用Python通过win32 COM打开Excel并添加Sheet的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-05-05
  • python实现停车场管理系统

    python实现停车场管理系统

    这篇文章主要为大家详细介绍了python实现停车场管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-06-06
  • windows、linux下打包Python3程序详细方法

    windows、linux下打包Python3程序详细方法

    这篇文章主要介绍了windows、linux下打包Python3程序详细方法,需要的朋友可以参考下
    2020-03-03
  • python实现简单反弹球游戏

    python实现简单反弹球游戏

    这篇文章主要为大家详细介绍了python实现简单反弹球游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-04-04
  • python使用PIL实现多张图片垂直合并

    python使用PIL实现多张图片垂直合并

    这篇文章主要为大家详细介绍了python使用PIL实现多张图片垂直合并,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-01-01
  • Python利用递归和walk()遍历目录文件的方法示例

    Python利用递归和walk()遍历目录文件的方法示例

    在日常开发中经常需要检查一个“目录或文件夹”内部有没有我们想要的文件或者文件夹,下面这篇文章主要给大家介绍了关于Python利用递归和walk()遍历目录文件的相关资料,需要的朋友可以参考借鉴,下面来一起看看吧。
    2017-07-07
  • 详解Python中的函数参数传递方法*args与**kwargs

    详解Python中的函数参数传递方法*args与**kwargs

    本文将讨论Python的函数参数。我们将了解args和kwargs,/和的都是什么,虽然这个问题是一个基本的python问题,但是在我们写代码时会经常遇到,比如timm中就大量使用了这样的参数传递方式
    2023-03-03
  • Python函数和模块的使用总结

    Python函数和模块的使用总结

    在本文中小编给大家整理了关于Python函数和模块的使用的相关知识点以及实例代码内容,需要的朋友们跟着学习下。
    2019-05-05
  • 使用Python实现在Excel工作表中添加、修改及删除超链接

    使用Python实现在Excel工作表中添加、修改及删除超链接

    在创建Excel工作簿时,内部文档的互链、报告自动化生成或是创建外部资源快速访问路径是比较常见的需求,本文将介绍如何使用Python实现在Excel工作表中对超链接进行添加、修改及删除的操作,需要的朋友可以参考下
    2024-10-10

最新评论