前往小程序,Get更优阅读体验!
立即前往
社区首页 >专栏 >Thrift的服务器和客户端Python案例

Thrift的服务器和客户端Python案例

作者头像
Lansonli
发布于 2021-10-09 07:52:52
发布于 2021-10-09 07:52:52
1.4K00
代码可运行
举报
文章被收录于专栏:Lansonli技术博客Lansonli技术博客
运行总次数:0
代码可运行

服务器

Thrift提供的常见服务端类型有一下几种:

  • thrift.server.TServer.TSimpleServer 单线程服务器
  • thrift.server.TServer.TThreadedServer 多线程服务器
  • thrift.server.TServer.TThreadPoolServer 线程池服务器
  • thrift.server.TServer.TForkingServer 多进程服务器

我们以线程池服务器为例,其他方式相同。

代码语言:javascript
代码运行次数:0
复制
import sys
sys.path.append('gen-py')  # 增加生成代码的查找包路径

from calculate import Calculate
from base.ttypes import InvalidOperation, Operation

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


class CalculateHandler(Calculate.Iface):
    """被调用方法的具体实现"""
    def ping(self):
        print('ping()')

    def divide(self, num1, num2):
        if num2 == 0:
            raise InvalidOperation(0, 'Cannot divide by 0')
        return num1 / num2

    def calculate(self, work):
        if work.op == Operation.ADD:
            val = work.num1 + work.num2
        elif work.op == Operation.SUBTRACT:
            val = work.num1 - work.num2
        elif work.op == Operation.MULTIPLY:
            val = work.num1 * work.num2
        else:
            raise InvalidOperation(work.op, 'Invalid operation')
        return val


if __name__ == '__main__':
    handler = CalculateHandler()
    processor = Calculate.Processor(handler)
    transport = TSocket.TServerSocket(host='127.0.0.1', port=8888)
    tfactory = TTransport.TBufferedTransportFactory()
    pfactory = TCompactProtocol.TCompactProtocolFactory()

    server = TServer.TThreadPoolServer(processor, transport, tfactory, pfactory)
    server.serve()
    print('服务器已启动')

客户端

代码语言:javascript
代码运行次数:0
复制
import sys
sys.path.append('gen-py')

from calculate import Calculate
from base.ttypes import InvalidOperation, Operation, Work

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TCompactProtocol


def main():
    transport = TSocket.TSocket('127.0.0.1', 8888)

    # 使用缓存传输
    transport = TTransport.TBufferedTransport(transport)

    # 使用压缩的二进制消息协议
    protocol = TCompactProtocol.TCompactProtocol(transport)

    client = Calculate.Client(protocol)

    # 连接
    transport.open()

    client.ping()
    print('ping()')

    result = client.divide(100, 50)
    print('100/50={}'.format(result))

    try:
        result = client.divide(100, 0)
    except InvalidOperation as e:
        print(e.why)

    work = Work(1, 2, Operation.ADD)
    result = client.calculate(work)
    print('1+2={}'.format(result))

    work = Work(15, 10, Operation.SUBTRACT)
    result = client.calculate(work)
    print('15-10={}'.format(result))

    # 关闭
    transport.close()


if __name__ == '__main__':
    main()
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/04/04 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
python thrift 服务端与客户端使用
本文生动简洁介绍了如何通过python搭建一个服务端和客户端的简单测试程序。 一、简介 thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。 二、安装 1.下载地址 http://www.apac
小小科
2018/05/03
3.4K0
Python Thrift示例
Apache Thrift 是 Facebook 实现的一种高效的、支持多种编程语言的远程服务调用的框架。本文将从 Python开发人员角度简单介绍 Apache Thrift 的架构、开发和使用。
py3study
2020/01/08
2.8K0
Thrift入门实践
Thrift是由facebook研发,用于各服务之间RPC的一个跨语言通信框架。C/S架构
Marky Lumin
2018/01/23
1.6K0
python thrift 服务端与客户
   thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 这些编程语言间无缝结合的、高效的服务。
py3study
2020/01/08
7750
Python RPC 之 Thrift 转
直接下载:thrift complier 下载地址,下载完成后改名为:thrift.exe 并将其放入到系统环境变量下即可使用
双面人
2019/04/10
3.3K0
thrift例子:python客户端/java服务端
java服务端的代码请看上文。 1、说明: 这两篇文章其实解决的问题是,当使用python去访问大数据线上集群的时候,遇到两个问题: 1)python-hadoop和python-hive相关包链接不稳定,表现为经常出现链接超时; 2)如果使用fork进程执行hadoop fs或者hive -e的方式则消耗大量的机器资源,包括进程资源和集群链接资源。 我们的解决方式是写一个java的代理服务,使用java-hadoop封装了对集群的操作,通过thrift提供接口给python程序。 2、编译.thrfit
用户1225216
2018/03/05
1.5K0
Apache Thrift基本使用介绍
Thrift 是用于点对点 RPC 实现的轻量级、独立于语言的软件堆栈。 Thrift 为数据传输、数据序列化和应用程序级处理提供了清晰的抽象和实现。 代码生成系统将简单的定义语言作为输入,并生成跨编程语言的代码,这些编程语言使用抽象堆栈来构建可互操作的 RPC 客户端和服务器。
从大数据到人工智能
2022/03/24
1.7K0
Apache Thrift基本使用介绍
Thrift接口测试实践
Thrift是Facebook实现的一种高效的并且支持多种主流编程语言的远程服务调用的框架,Thrift服务器包含了用于绑定协议和传输层的基础架构,也是基于HTTP/2.0的版本实现,Thrift提供阻塞,非阻塞,单线程,多线程的模式运行在服务器上,结合容器化技术可以实现无缝的对接。
无涯WuYa
2022/06/16
8580
Thrift接口测试实践
thrift 的基本介绍与使用
thrift 是一个 apache 公司开源的一款 RPC 框架,让不同语言构建的服务可以做到远程调用无缝对接。 thrift 服务分为服务提供方(server 端)和服务请求方(client 端)
用户3147702
2022/06/27
2K0
thrift 的基本介绍与使用
『高级篇』docker之Python开发信息服务(11)
PS:thrift的开发流程是: 先定义thrift的文件,然后通过命令生成对应的python代码。通过实现定义的thrift方法,来完成thrift的调用。
IT架构圈
2018/10/18
8650
python连接HBase
hadoop 2.7.0 hbase 1.2.1 Thrift 0.9.0
py3study
2020/01/07
2.4K0
HBase Thrift with Python
本文内容是基于 Centos 7、HDP 3.0.0、HBase 2.0.0、Python 2.7 环境下,其他环境的童鞋选择性进行参考。
迹_Jason
2019/05/28
3.3K1
Apache Thrift-Node.js教程
所有Apache Thrift教程都要求您具备: 1.Apache Thrift编译器和库,请参阅下载和从源代码构建以获取更多详细信息。 2.生成了tutorial.thrift和shared.thrift文件 3.遵循以下所有先决条件。
ccf19881030
2020/11/24
1.1K0
Apache Thrift-Node.js教程
Thrift结构分析及增加取客户端IP功能实现
分析Thrift的结构动机是为了实现服务端能取到客户端的IP,因此需要对它的结构、调用流程有些了解。另外,请注意本文针对的是TNonblockingServer,不包含TThreadPoolServer、TThreadedServer和TSimpleServer。
一见
2018/08/06
2.9K0
Thrift结构分析及增加取客户端IP功能实现
Thrift不同服务类型的使用探索
Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发。它结合了功能强大的软件堆栈和代码生成引擎,以构建在 C++, Java, Python, PHP, Ruby, Erlang, Perl, Haskell, C#, Cocoa, JavaScript, Node.js, Smalltalk, and OCaml 等等编程语言间无缝结合的、高效的服务。
孟君
2019/09/19
3.8K0
Thrift不同服务类型的使用探索
python 连接 hive
在网上搜索关键字 python hive 的时候可以找到一些解决方案。大部分是这样的,首先把hive 根目录下的$HIVE_HOME/lib/py拷贝到 python 的库中,也就是 site-package 中,或者干脆把新写的 python 代码和拷贝的 py 库放在同一个目录下,然后用这个目录下提供的 thrift 接口调用。示例也是非常简单的。类似这样:
py3study
2020/01/14
2.3K0
Thrift 服务模型和序列化机制深入学习
http://www.liuqianfei.com/article/065b0f1ee59a4cf0b94a84c4e33af127
bear_fish
2018/09/19
1.3K0
Thrift 服务模型和序列化机制深入学习
利用Python调用HBASE
利用Python调用HBASE的 需要安装thrift hbase-thrift 
py3study
2020/01/08
8680
【译】基于python 的 RPC 框架比较: gRPC vs Thrift vs RPyC
那一年是2015年。我正在写一堆ML训练脚本以及几个生产脚本。他们都需要金融数据。数据分散在多个表和多个数据存储中。日内市场数据以不同方式存储在cassandra集群中,而每日/每月的数据则在MySQL数据库中。同样地,不同类型的证券(期货、期权、股票等)被存储在不同的位置。
goodspeed
2021/08/18
8.7K0
Apache Thrift – 可伸缩的跨语言服务开发框架
本文转载自Apache Thrift – 可伸缩的跨语言服务开发框架,详细介绍了Apache Thrift 的架构、开发和部署。
ccf19881030
2020/11/24
8330
Apache Thrift – 可伸缩的跨语言服务开发框架
相关推荐
python thrift 服务端与客户端使用
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文