Development Status
- 4 - Beta
Intended Audience
- Developers
License
- OSI Approved :: MIT License
Programming Language
- Python :: 3
- Python :: 3.14
- Python :: 3.13
- Python :: 3.12
- Python :: 3.11
- Python :: 3.10
- Python :: 3.11
- Python :: 3.12
- Python :: 3.7
- Python :: 3.8
- Python :: 3.9
- Python :: Implementation :: CPython
- Python :: Implementation :: PyPy
Topic
- Software Development
ThriftPy2 is a pure Python implementation of the Apache Thrift protocol. It allows you to parse Thrift IDL files and create RPC clients/servers without code generation or compilation.
Installation
Install with pip:
$ pip install thriftpy2
Features
Python 3.7+ and PyPy3.
Pure Python implementation. No need to compile or install the thrift package. All you need is thriftpy2 and a thrift file.
Dynamically load thrift files as Python modules, with code generated on the fly.
Compatible with Apache Thrift. You can use ThriftPy2 together with the official implementation servers and clients.
Easy RPC server/client setup.
Supported protocols and transports:
binary protocol (Python and Cython)
compact protocol (Python and Cython)
JSON protocol
Apache JSON protocol
buffered transport (Python and Cython)
framed transport
HTTP server and client
asyncio support
Quick Start
Define a pingpong.thrift file:
service PingPong {
string ping(),
}
Server
import thriftpy2
from thriftpy2.rpc import make_server
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
class Dispatcher(object):
def ping(self):
return "pong"
server = make_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)
server.serve()
Client
import thriftpy2
from thriftpy2.rpc import make_client
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
print(client.ping()) # prints "pong"
Async Server
import thriftpy2
from thriftpy2.rpc import make_aio_server
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
class Dispatcher(object):
async def ping(self):
return "pong"
server = make_aio_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)
server.serve()
Async Client
import asyncio
import thriftpy2
from thriftpy2.rpc import make_aio_client
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")
async def main():
client = await make_aio_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
print(await client.ping()) # prints "pong"
client.close()
if __name__ == '__main__':
asyncio.run(main())
See the examples and tests directories for more usage examples.
Migrate from ThriftPy
ThriftPy (https://github.com/eleme/thriftpy) has been deprecated. ThriftPy2 is fully compatible, just change your import:
import thriftpy2 as thriftpy
Contribute
Fork the repo and make changes.
Write a test that shows a bug was fixed or the feature works as expected.
Make sure tox tests succeed.
Send a pull request.