ThriftPy is a pure python implemention of Apache Thrift in a pythonic way.
Documentation: https://thriftpy.readthedocs.org/
Install while pip
$ pip install thriftpy
You may also install cython first to build cython extension locally.
$ pip install cython thriftpy
ThriftPy make it super easy to write server/client code with thrift. Let's checkout this simple pingpong service demo.
We need a 'pingpong.thrift' file:
service PingPong { string ping(), }
Then we can make a server:
from thriftpy.rpc import make_server
import pingpong_thrift
class Dispatcher(object):
def ping(self):
return "pong"
server = make_server(pingpong_thrift.PingPong, Dispatcher(), '127.0.0.1', 6000)
server.serve()
And a client:
from thrift.rpc import make_client
import pingpong_thrift
client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
client.ping()
See, it's that easy!
You can refer to 'examples' and 'tests' directory in source code for more usage examples.
Currently ThriftPy have these features (also advantages over the upstream python lib):
Supports python2.7 to python3.4 and pypy.
Compatiable with Apache Thirft. You can use ThriftPy together with the official implemention servers and clients, such as a upstream server with a thriftpy client or the opposite.
(Currently only binary protocol & buffered transport were implemented.)
Can import thrift file as normal py modules. The sdk code is generated on the fly.
For example,
import pingpong_thrift
will import the 'pingpong.thrift' file as modulePure python, standalone implemention. No longer need to compile & install the 'thrift' package. All you need is python and thrift file.
Easy RPC server/client setup.
Currently ThriftPy is not fully compatiable with thrift, I only implemented the features we need at ele.me.
These todos need to be done, but may not be completed by me in near future, so contributions are very welcome!
other protocol and transport except binary and buffered transport.
Cython binary protocol code audit & C Binary extension.
I'm not good at C or Cython programming so the cython implemention may have issues and need to be audited. The cython binary protocol implemention is about 2-3 times faster than the python binary protocol, but still many times slower than the official C extension. A better c extension needed.
map type const.
'namespace', 'extends', 'import', 'oneway' keywords.
the '.thrift' file parser will skip a section if it has syntax error. A better warning message should be given.
- Fork the repo and make changes.
- Write a test which shows a bug was fixed or the feature works as expected.
- Make sure travis-ci test succeed.
- Send pull request.