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

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

服务器



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


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


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


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('服务器已启动')


客户端


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()

 


目录
相关文章
|
9天前
|
存储 算法 数据挖掘
服务器数据恢复—昆腾存储StorNext文件系统数据恢复案例
服务器数据恢复环境: 昆腾某型号存储,8个存放数据的存储柜+1个存放元数据的存储柜。 元数据存储:8组RAID1阵列+1组RAID10阵列+4个全局热备硬盘。 数据存储:32组RAID5阵列,划分2个存储系统。 服务器故障: 数据存储的1个存储系统中的一组RAID5阵列中有2块硬盘先后出现故障离线,导致该RAID5阵列失效,整个存储系统崩溃不可用。
服务器数据恢复—昆腾存储StorNext文件系统数据恢复案例
|
20天前
|
安全 Java 数据处理
Python网络编程基础(Socket编程)多线程/多进程服务器编程
【4月更文挑战第11天】在网络编程中,随着客户端数量的增加,服务器的处理能力成为了一个重要的考量因素。为了处理多个客户端的并发请求,我们通常需要采用多线程或多进程的方式。在本章中,我们将探讨多线程/多进程服务器编程的概念,并通过一个多线程服务器的示例来演示其实现。
|
1天前
|
机器学习/深度学习 数据采集 TensorFlow
【Python机器学习专栏】使用Python进行图像分类的实战案例
【4月更文挑战第30天】本文介绍了使用Python和深度学习库TensorFlow、Keras进行图像分类的实战案例。通过CIFAR-10数据集,展示如何构建和训练一个卷积神经网络(CNN)模型,实现对10个类别图像的识别。首先安装必要库,然后加载数据集并显示图像。接着,建立基本CNN模型,编译并训练模型,最后评估其在测试集上的准确性。此案例为初学者提供了图像分类的入门教程,为进一步学习和优化打下基础。
|
2天前
|
分布式计算 DataWorks 关系型数据库
MaxCompute产品使用合集之我需要在MaxCompute客户端添加Python第三方包,我该怎么操作
MaxCompute作为一款全面的大数据处理平台,广泛应用于各类大数据分析、数据挖掘、BI及机器学习场景。掌握其核心功能、熟练操作流程、遵循最佳实践,可以帮助用户高效、安全地管理和利用海量数据。以下是一个关于MaxCompute产品使用的合集,涵盖了其核心功能、应用场景、操作流程以及最佳实践等内容。
|
2天前
|
存储 运维 Oracle
服务器数据恢复—MSA2000存储raid5阵列瘫痪导致lun不可用的数据恢复案例
服务器存储数据恢复环境: 某品牌MSA2000存储,该存储中有一组由8块SAS硬盘(其中有一块热备盘)组建的RAID5阵列,raid5阵列上层划分了6个lun,均分配给HP-Unix小型机使用,主要数据为oracle数据库和OA服务端。 服务器存储故障: 该MSA2000存储RAID5阵列中2块硬盘出现故障离线,阵列中只有一块热备盘,虽然热备盘成功激活,RAID5阵列瘫痪,上层LUN无法使用,存储不可用。
服务器数据恢复—MSA2000存储raid5阵列瘫痪导致lun不可用的数据恢复案例
|
4天前
|
Python
python实现股票策略回测案例
此Python代码演示了一个简单的股票策略回测,使用yfinance库获取AAPL股票2020年至2022年的数据。它计算每日收益率,并基于前一日收益率决定买卖:正则买入,负则卖出。通过模拟交易更新现金和股票余额,最终计算总收益。请注意,此示例未涵盖交易费用、滑点、风险管理等实际交易因素。
14 0
|
4天前
|
Python
python实现股票均线策略案例
此Python代码示例展示了如何运用均线策略进行股票交易模拟。它下载AAPL的股票历史数据,计算每日收益率,设置短期和长期移动平均线。当短期均线超过长期均线时,模拟买入;反之则卖出。代码遍历每一天,更新现金和股票余额,并最终计算总收益。请注意,实际交易需考虑更多因素如交易费用和风险管理。
16 2
|
7天前
|
存储 关系型数据库 数据库
服务器数据恢复—ESXi无法识别原数据存储和VMFS文件系统的数据恢复案例
一台某品牌服务器,通过FreeNAS来做iSCSI,然后使用两台同品牌服务器做ESXi虚拟化系统。 FreeNAS层为UFS2文件系统,使用整个存储建一个稀疏模式的文件,挂载到ESXi虚拟化系统。ESXi虚拟化系统中有3台比较重要的虚拟机,这几台虚拟机情况如下: 1、windows server操作系统,运行门户网站,采用ASP.net+PHP混合构架,部署的SqlServer和mysql数据库 。 2、FreeBSD操作系统,运行Mysql数据库,供其他多台虚拟机使用。 3、windows server系统,存放新开发的程序代码。
|
7天前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
13 3
|
8天前
|
人工智能 Python
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
【AI大模型应用开发】【LangChain系列】实战案例1:用LangChain写Python代码并执行来生成答案
13 0