广告
返回顶部
首页 > 资讯 > 后端开发 > Python >Python Thrift示例
  • 245
分享到

Python Thrift示例

示例PythonThrift 2023-01-31 06:01:10 245人浏览 泡泡鱼

Python 官方文档:入门教程 => 点击学习

摘要

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。本文将从 python开发人员角度简单介绍 Apache Thrift 的架构、开发和使用。 Thrift networ

Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。本文将从 python开发人员角度简单介绍 Apache Thrift 的架构开发和使用。

Thrift network stack

Transport

Transport网络读写(SocketHttp等)抽象,用于和其他thrift组件解耦。
Transport的接口包括:open, close, read, write, flush, isOpen, readAll。
Server端需要ServerTransport(对监听socket的一种抽象),用于接收客户端连接,接口包括:listen, accept, close。
python中Transport的实现包括:TSocket, Thttpserver, TSSLSocket, TTwisted, TZlibTransport,都是对某种协议或框架的实现。还有两个装饰器,用于为已有的Transport添加功能,TBufferedTransport(增加缓冲)和TFramedTransport(添加帧)。
在创建server时,传入的时Tranport的工厂,这些Factory包括:TTransportFactoryBase(没有任何修饰,直接返回),TBufferedTransportFactory(返回带缓冲的Transport)和TFramedTransportFactory(返回帧定位的Transport)。

Protocol

Protocol用于对数据格式抽象,在rpc调用时序列化请求和响应。
TProtocol的实现包括:TJSONProtocol,TSimplejsONProtocol,TBinaryProtocol,TBinaryPotocolAccelerated,TCompactProtocol。

Processor

Processor对stream读写抽象,最终会调用用户编写的handler已响应对应的service。具体的Processor有compiler生成,用户需要实现service的实现类。

Server

Server创建Transport,输入、输出的Protocol,以及响应service的handler,监听到client的请求然后委托给processor处理。
TServer是基类,构造函数的参数包括:
1) processor, serverTransport
2) processor, serverTransport, transportFactory, protocolFactory
3) processor, serverTransport, inputTransportFactory, outputTransportFactory, inputProtocolFactory, outputProtocolFactory   
TServer内部实际上需要3)所列的参数,1)和2)会导致对应的参数使用默认值。
TServer的子类包括:TSimpleServer, TThreadedServer, TThreadPoolServer, TForkingServer, THttpServer, TNonblockingServer, TProcessPoolServer
TServer的serve方法用于开始服务,接收client的请求。

Code generated

constants.py: 包含声明的所有常量
ttypes.py: 声明的struct,实现了具体的序列化和反序列化
SERVICE_NAME.py: 对应service的描述文件,包含了:
    Iface: service接口定义
    Client: client的rpc调用桩

用法

Thrift的用法实际上很简单,定义好IDL,然后实现service对应的handler(方法名、参数列表与接口定义一致接口),最后就是选择各个组件。需要选择的包括:Transport(一般都是socket,只是十分需要选择buffed和framed装饰器factory),Protocol,Server。

IDL文件


service HelloService {
    string say(1:string msg)
}

在编辑好定义文件后, 运行如下命令,生成thrift文件。可把hello目录移到当前目录下,便于后面调用。

thrift -r -gen py hello.thrift

server

# coding: utf-8
"""
thrift_client.py
"""
import socket
import sys
from hello import HelloService
from hello.ttypes import *

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol
from thrift.server import TServer


class HelloServiceHandler:
    def say(self, msg):
        ret = "Received: " + msg
        print ret
        return ret


handler = HelloServiceHandler()
processor = HelloService.Processor(handler)
transport = TSocket.TServerSocket("localhost", 9090)
tfactory = TTransport.TBufferedTransportFactory()
pfactory = TBinaryProtocol.TBinaryProtocolFactory()

server = TServer.TSimpleServer(processor, transport, tfactory, pfactory)

print "Starting thrift server in Python..."
server.serve()
print "done!"

client

# coding: utf-8
"""
thrift_client.py
"""

import sys
from hello import HelloService

from thrift import Thrift
from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

try:
    transport = TSocket.TSocket('localhost', 9090)
    transport = TTransport.TBufferedTransport(transport)
    protocol = TBinaryProtocol.TBinaryProtocol(transport)
    client = HelloService.Client(protocol)
    transport.open()

    print "client - say"
    msg = client.say("Hello!")
    print "server - " + msg

    transport.close()

except Thrift.TException, ex:
    print "%s" % (ex.message)

运行结果

$ ptyhon thrift_client.py
client - say
server - Received: Hello!

$ python thrift_server.py
Starting thrift server in python...
Received: Hello!

本文只是一个简单的示例,在实际项目中,一般会基于ZooKeeper来注册和管理服务的thrift状态,并对server和client进一步封装,便于在项目各个模块中调用。

  1. Python thrift使用示例
  2. https://thrift.apache.org/docs/concepts

--结束END--

本文标题: Python Thrift示例

本文链接: https://www.lsjlt.com/news/189551.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Python Thrift示例
    Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。本文将从 Python开发人员角度简单介绍 Apache Thrift 的架构、开发和使用。 Thrift networ...
    99+
    2023-01-31
    示例 Python Thrift
  • 如何分析Thrift示例
    今天给大家介绍一下如何分析Thrift示例。文章的内容小编觉得不错,现在给大家分享一下,觉得有需要的朋友可以了解一下,希望对大家有所帮助,下面跟着小编的思路一起来阅读吧。demo.thrift 文件内容如下namespace java co...
    99+
    2023-06-03
  • Thrift in python
    Thrift官网上的文档很少,从网上搜到的也大都千篇一律,即使是《Thrift: the missing guide》对如何构建python的server和client也没有进行详尽讲述。本博特意看了下thrift提供的python l...
    99+
    2023-01-31
    Thrift python
  • ubuntu下python thrift
    1、下载thrift: wget http://mirror.bjtu.edu.cn/apache//thrift/0.8.0/thrift-0.8.0.tar.gz  2、安装依赖: sudo apt-get install build-...
    99+
    2023-01-31
    ubuntu python thrift
  • thrift的使用--python
    转载blog:http://www.cnblogs.com/pinking/p/7726478.html在这里要补充一点的就是在在这里python要安装thrift包时候,可以直接在安装好的thrift好的模块中sudo python s...
    99+
    2023-01-31
    thrift python
  • python thrift 服务端与客户
    一、简介   thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#...
    99+
    2023-01-31
    服务端 客户 python
  • 使用python-thrift问题汇总
    使用环境是Centos6.4,python版本2.7.3,thrift版本0.9.0。使用中遇到了以下问题:1. root:code for hash md5 was not found没有找到MD5的库,于是解释器又去寻找SHA1 SH...
    99+
    2023-01-31
    python thrift
  • python怎么实现Thrift服务端
    这篇文章将为大家详细讲解有关python怎么实现Thrift服务端,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。python可以做什么Python是一种编程语言,内置了许多有效的工具,Python几乎无所...
    99+
    2023-06-14
  • python实现Thrift服务端的方法
    目录环境准备编写.thrift文件生成python对应的thrift代码编写服务端编写客户端用于测试测试服务端近期在项目中存在跨编程语言协作的需求,使用到了Thrift。本文将记录用...
    99+
    2022-11-12
  • python部署thrift服务以及客户
    第一步:定义接口 文件名:parse.thrift 内容如下:   service Parse { string parseHtml2Xml(1:string html) } 第二步:在thrift接口所在目录执行...
    99+
    2023-01-31
    客户 python thrift
  • python绘图示例
    直方图、PDF图、CDF图 直方图 画直方图可以参考Python 中用 matplotlib 绘制直方图(histograms)。另外,plot.ly也提供了画直方图的多种方式。 直方图+PDF图+CDF图 参见kernel...
    99+
    2023-01-31
    示例 python
  • 利用python访问Hbase(Thrift模块安装与测试)
    hadoop环境介绍:master服务:node1slave服务器:node2,node3,node4mysql服务器:node29Thrift安装在node1服务器上!相关软件版本:hadoop版本:ha...
    99+
    2022-10-18
  • hbase之python利用thrift操作hbase数据和shell操作
    前沿:        以前都是用mongodb的,但是量大了,mongodb显得不那么靠谱,改成hbase撑起一个量级。HBase是Apache Hadoop的数据库...
    99+
    2022-10-18
  • python: mongodb应用示例
    windows 32位系统安装mongodb1. 下载MongoDB http://downloads.mongodb.org/win32/mongodb-win32-i386-3.2.12.zip2. 解压到d盘,重命名为mongodb,...
    99+
    2023-01-31
    示例 python mongodb
  • Python asyncio的示例分析
    Python asyncio的示例分析,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。我们先从一个常见的Python编程错误开始说起,我已经见过非常多的程序员犯过这...
    99+
    2023-06-22
  • Python中turtle作图示例
    在Python里,海龟不仅可以画简单的黑线,还可以用它画更复杂的几何图形,用不同的颜色,甚至还可以给形状填色。 一、从基本的正方形开始 引入turtle模块并创建Pen对象: >>> ...
    99+
    2022-06-04
    示例 Python turtle
  • Python代码示例分析
    这篇文章主要介绍了Python代码示例分析的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Python代码示例分析文章都会有所收获,下面我们一起来看看吧。题目加粗,注意事项红色(...
    99+
    2022-10-19
  • Python selenium find_element()示例详解
    selenium有以下定位方式: driver.find_element_by_id(‘id') driver.find_element_by_xpath('xpath') driv...
    99+
    2022-11-11
  • python中的异常示例
    最常见的异常就是文件打开 时,找不到文件try:     f = open(“file.txt”,”r”) except IOError, e:     print e然后就是命名空间异常,也就是没有定义这个变量或对象try:     s ...
    99+
    2023-01-31
    示例 异常 python
  • python 3 while 循环示例
    示例一: AGE = 20 count = 0 while True:     if count == 5:         break     GUESS = int(input("AGE:"))     if GUESS == AGE...
    99+
    2023-01-31
    示例 python
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作