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

 


目录
相关文章
|
6月前
|
人工智能 JavaScript API
零基础构建MCP服务器:TypeScript/Python双语言实战指南
作为一名深耕技术领域多年的博主摘星,我深刻感受到了MCP(Model Context Protocol)协议在AI生态系统中的革命性意义。MCP作为Anthropic推出的开放标准,正在重新定义AI应用与外部系统的交互方式,它不仅解决了传统API集成的复杂性问题,更为开发者提供了一个统一、安全、高效的连接框架。在过去几个月的实践中,我发现许多开发者对MCP的概念理解透彻,但在实际动手构建MCP服务器时却遇到了各种技术壁垒。从环境配置的细节问题到SDK API的深度理解,从第一个Hello World程序的调试到生产环境的部署优化,每一个环节都可能成为初学者的绊脚石。因此,我决定撰写这篇全面的实
1362 67
零基础构建MCP服务器:TypeScript/Python双语言实战指南
|
3月前
|
存储 运维 数据挖掘
服务器数据恢复—EqualLogic存储硬盘出现坏道的数据恢复案例
某品牌EqualLogic PS6100存储阵列上有一组由16块硬盘组建的raid5磁盘阵列。磁盘阵列上层划分多个大小不同的卷,存放虚拟机文件。 硬盘出现故障导致存储阵列不可用,需要恢复存储阵列中的数据。
|
3月前
|
存储 运维 Oracle
服务器数据恢复—存储硬盘指示灯亮黄灯,RAID5阵列崩溃的数据恢复案例
服务器存储数据恢复环境: 某单位一台某品牌DS5300存储,1个机头+4个扩展柜,50块的硬盘组建了两组RAID5阵列。一组raid5阵列有27块硬盘,存放Oracle数据库文件。存储系统上层一共划分了11个卷。 服务器存储故障: 存储设备上两个硬盘指示灯亮黄色。其中一组RAID5阵列崩溃,存储不可用,设备已经过保。
|
3月前
|
数据采集 监控 数据库
Python异步编程实战:爬虫案例
🌟 蒋星熠Jaxonic,代码为舟的星际旅人。从回调地狱到async/await协程天堂,亲历Python异步编程演进。分享高性能爬虫、数据库异步操作、限流监控等实战经验,助你驾驭并发,在二进制星河中谱写极客诗篇。
Python异步编程实战:爬虫案例
|
4月前
|
Unix 应用服务中间件 索引
服务器数据恢复—LUN映射出错导致文件系统共享冲突的数据恢复案例
SUN光纤存储系统中有一组由6个硬盘组建的RAID6,划分为若干LUN,MAP到跑不同业务的服务器上,这些服务器上运行的是SOLARIS操作系统。 服务器不存在物理故障。由于公司业务变化,需要增加一台服务器跑新的应用。服务器管理员在原服务器在线的状态下,将其中一个lun映射到一台新服务器上。实际上,这个刚映射过去的卷已经map到了solaris生产系统上的某个lun上了。映射到新服务器后,服务器对这个卷进行初始化的操作,原solaris系统上的磁盘报错,重启服务器后这个卷已经无法挂载。 服务器管理员寻求sun原厂工程师的帮助。sun工程师检测后执行了fsck操作。执行完成后文件系统挂载成功。查
|
4月前
|
存储 数据挖掘 Linux
服务器数据恢复—重装系统导致OceanStor存储上的分区无法访问的数据恢复案例
服务器存储数据恢复环境: 华为OceanStor某型号存储+扩展盘柜,存储中的硬盘组建了raid5磁盘阵列,上层分配了1个lun。 linux操作系统,划分了两个分区,分区一通过lvm扩容,分区二为xfs文件系统。 服务器存储故障: 工作人员重装系统操作失误导致磁盘分区变化,分区二无法访问,数据丢失。
|
5月前
|
存储 算法 数据挖掘
服务器数据恢复—昆腾存储StorNext文件系统数据恢复案例
一台昆腾存储设备中有一组raid5磁盘阵列。阵列上有两块硬盘先后离线,raid5磁盘阵列不可用。
|
5月前
|
人工智能 自然语言处理 安全
Python构建MCP服务器:从工具封装到AI集成的全流程实践
MCP协议为AI提供标准化工具调用接口,助力模型高效操作现实世界。
1008 1
|
4月前
|
存储 数据挖掘 Windows
服务器数据恢复—RAIDZ上层ZFS文件系统数据恢复案例
一台服务器有32块硬盘,采用Windows操作系统。 服务器在正常运行的时候突然变得不可用。没有异常断电、进水、异常操作、机房不稳定等外部因素。服务器管理员重启服务器,但是服务器无法进入系统。管理员联系北亚企安数据恢复工程师要求恢复服务器数据。
|
4月前
|
存储
服务器数据恢复—服务器断电导致数据丢失的数据恢复案例
某品牌服务器中有12块硬盘,组建了一组raid5磁盘阵列,服务器内存储的是普通文件。 机房供电不稳定导致服务器断电,管理员重启服务器后发现服务器无法正常工作。 根据描述的故障发生过程,北亚企安数据恢复工程师推断故障是意外断电导致raid模块损坏。

推荐镜像

更多