为什么选择ThriftPy2零代码生成纯Python玩转Apache Thrift RPC完整指南【免费下载链接】thriftpy2Pure python approach of Apache Thrift.项目地址: https://gitcode.com/gh_mirrors/th/thriftpy2如果你想在 Python 中调用 Apache Thrift 服务却不想被复杂的代码生成和编译器折腾那么ThriftPy2值得你关注。它是一个纯 Python 实现的 Apache Thrift RPC 框架无需安装 thrift 编译器无需生成任何 SDK 代码直接加载.thrift文件即可构建高性能的 RPC 客户端与服务端完整兼容 Apache Thrift 协议可与 Java、Go 等官方实现无缝互通。 什么是 ThriftPy2ThriftPy2 是 Apache Thrift 的纯 Python 实现方案Pure Python Approach核心解决一个痛点官方 Thrift 需要先用thrift编译器为每种语言生成大量胶水代码而 ThriftPy2 把这个过程完全省掉了。它的核心能力可以概括为✅零代码生成运行时直接解析并加载.thrift文件为 Python 模块SDK 代码即时生成✅纯 Python不需要编译安装 thrift C 库pip install thriftpy2一步到位✅完全兼容 Apache Thrift可以混用例如官方 Java 服务端 ThriftPy2 Python 客户端✅异步支持内置 asyncio、Tornado、HTTP 等多种服务端/客户端形态 ThriftPy老版本已停止维护ThriftPy2 是其长期支持的继任者且完全兼容老版本的 API。 最快安装方法一条 pip 命令搞定无需任何前置依赖无需 C 编译器pip install thriftpy2如果你希望启用 Cython 加速的二进制协议实现性能更高可以在安装时加上 cythonpip install cython thriftpy2安装后即可导入使用import thriftpy2 as thriftpy就是这么简单这也是相比官方实现最大的体感差异——没有编译、没有代码生成、没有一堆生成文件的维护负担。 三步上手写一个 Thrift RPC 服务下面用一个经典的 pingpong 例子感受一下零代码生成的爽快。项目中的示例位于examples/pingpong/目录定义文件见 pingpong.thrift。第 1 步写一个接口定义文件pingpong.thriftservice PingService { string ping(), }第 2 步写服务端参考 ping_server.pyimport thriftpy2 from thriftpy2.rpc import make_server pp_thrift thriftpy2.load(pingpong.thrift, module_namepp_thrift) class Dispatcher(object): def ping(self): return pong server make_server(pp_thrift.PingService, Dispatcher(), 127.0.0.1, 6000) server.serve()第 3 步写客户端参考 ping_client.pyimport thriftpy2 from thriftpy2.rpc import make_client pp_thrift thriftpy2.load(pingpong.thrift, module_namepp_thrift) client make_client(pp_thrift.PingService, 127.0.0.1, 6000) print(client.ping()) # - pong对比官方流程定义 IDL → 运行 thrift 编译器 → 生成几十上百行胶水代码 → 处理生成代码的更新。而 ThriftPy2 只有写 IDL → 加载 → 调用三步接口变更时只需改.thrift文件即可无需重新生成。 核心亮点.thrift 文件像 Python 模块一样加载这是 ThriftPy2 最核心的设计位于thriftpy2/parser/模块。方式一显式加载thrift_module thriftpy2.load(pingpong.thrift, module_namepingpong_thrift)一行代码后.thrift文件中定义的所有 struct、service、enum 就变成了真实的 Python 对象可以直接thrift_module.PingService使用。方式二import hook直接import导入thriftpy2.install_import_hook() import pingpong_thrift # 自动加载同目录下的 pingpong.thrift from pingpong_thrift import PingService实现原理见thriftpy2/hook.py它通过 Python 的sys.meta_path机制把_thrift后缀的模块名自动映射为同名.thrift文件的解析结果。用起来和 import 普通模块毫无区别对团队协作非常友好。⚡ 特性全景图比官方 Python 库多了什么ThriftPy2 已实现的协议与传输层如下全部在thriftpy2/protocol/与thriftpy2/transport/目录中类别支持内容说明协议Binary Protocol官方默认协议性能首选协议Compact Protocol更省带宽的压缩协议协议JSON / Apache JSON与 Apache 官方 JSON 协议互通传输Buffered / Framed支持 Cython 加速版本传输Socket / SSL Socket支持 HTTPS 级安全通信传输SASL、Unix Socket0.5 版本新增 SASL 支持框架asyncioPython 3.5 全异步客户端/服务端框架Tornado兼容 Tornado 4.0框架HTTP支持 HTTP 方式的 Thrift 调用几个值得新手留意的进阶能力asyncio 支持通过thriftpy2.rpc.make_aio_client/make_aio_server几行代码就能写出全异步服务示例见examples/asyncio_echo/SSL 加密make_client传入certfile/cafile即可启用 TLS测试证书在tests/ssl/目录多路复用Multiplexed一个端口承载多个服务见examples/multiplexer/Oneway 调用不等待响应的单向调用见examples/oneway/ 学习路径从示例到源码想更深入按这个顺序看就够了入门示例examples/pingpong/最简单的 echo 服务完整教程examples/tutorial/包含 struct、异常处理、枚举的完整 Calculator 服务对应 Thrift 官方 tutorial 场景实战场景examples/calculator/、examples/gunicorn_thrift/在 Gunicorn 中运行 Thrift、examples/oneway/底层实现IDL 解析器thriftpy2/parser/parser.py基于 PLYRPC 工厂thriftpy2/rpc.pymake_client/make_server的完整参数都在这里类型系统thriftpy2/thrift.py行为验证tests/目录下有完整的协议兼容性测试用例 从老版 Thriftpy 迁移一行代码如果你在用已停止维护的 Thriftpy迁移成本几乎为零——只需把 import 语句换掉# 老代码 import thriftpy # 新代码 import thriftpy2 as thriftpyAPI 完全兼容其余代码无需改动。❓ 常见问题 FAQQ1ThriftPy2 和官方 thrift Python 库能混用吗能。ThriftPy2 的协议实现与 Apache Thrift 兼容官方 Java/C 服务端可以直接被 ThriftPy2 客户端调用反之亦然。Q2不需要 thrift 编译器了吗完全不需要。ThriftPy2 自带纯 Python 的 IDL 解析器只要你有.thrift文件就够了。Q3支持 Python 2 吗不支持。0.5 版本起仅支持 Python 3.6 和 PyPy3。Q4性能如何二进制协议和传输层都提供 Cython 加速实现thriftpy2/protocol/cybin/、thriftpy2/transport/下的.pyx文件安装时带上 cython 即可启用。性能对比数据见benchmark/目录。✅ 总结什么时候该选 ThriftPy2满足以下任意一条建议直接上 ThriftPy2 需要对接已有的 Apache Thrift 服务但不想引入编译器工具链 团队以 Python 为主希望接口变更不用走改 IDL → 重新生成 → 提交生成代码的流程 需要 asyncio/Tornado/HTTP 等 Python 生态内的多种服务形态 还在用老版 Thriftpy想升级到长期维护版本一句话总结ThriftPy2 让你把 Thrift 当成一个普通的 Python 库来用——写 IDL、pip 安装、load 加载、发起调用整个 RPC 开发流程被压缩到极致是 Python 工程师玩转 Apache Thrift 的省心之选。【免费下载链接】thriftpy2Pure python approach of Apache Thrift.项目地址: https://gitcode.com/gh_mirrors/th/thriftpy2创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考