All Projects → Thriftpy → Thriftpy2

Thriftpy / Thriftpy2

Licence: mit
Pure python approach of Apache Thrift.

Programming Languages

python
139335 projects - #7 most used programming language

Labels

Projects that are alternatives of or similar to Thriftpy2

Nettythrift
Thrift on Netty, support TCP/HTTP/WebSocket at same port. support multiple Protocols at same time. multil Simple Clients with Connection Pool.
Stars: ✭ 60 (-85.07%)
Mutual labels:  rpc, thrift
Finagle
A fault tolerant, protocol-agnostic RPC system
Stars: ✭ 8,126 (+1921.39%)
Mutual labels:  rpc, thrift
Javaspringbootsamples
SpringBoot、Dubbo、SpringCloud的各种集成例子:Atomikos、gRPC、Thrift、Seata、ShardingSphere、Dubbo、Hmily、Nacos、Consul、Ribbon、Jedis、Lettuce、Redisson等框架
Stars: ✭ 399 (-0.75%)
Mutual labels:  rpc, thrift
Yarpc Go
A message passing platform for Go
Stars: ✭ 285 (-29.1%)
Mutual labels:  rpc, thrift
Elixir Thrift
A Pure Elixir Thrift Implementation
Stars: ✭ 182 (-54.73%)
Mutual labels:  rpc, thrift
Thriftpy
Thriftpy has been deprecated, please migrate to https://github.com/Thriftpy/thriftpy2
Stars: ✭ 1,156 (+187.56%)
Mutual labels:  rpc, thrift
Srpc
RPC based on C++ Workflow
Stars: ✭ 521 (+29.6%)
Mutual labels:  rpc, thrift
Dapeng Soa
A lightweight, high performance micro-service framework
Stars: ✭ 101 (-74.88%)
Mutual labels:  rpc, thrift
thrift-typescript
Generate TypeScript from Thrift IDL files
Stars: ✭ 129 (-67.91%)
Mutual labels:  thrift, rpc
Armeria
Your go-to microservice framework for any situation, from the creator of Netty et al. You can build any type of microservice leveraging your favorite technologies, including gRPC, Thrift, Kotlin, Retrofit, Reactive Streams, Spring Boot and Dropwizard.
Stars: ✭ 3,392 (+743.78%)
Mutual labels:  rpc, thrift
Springboot Learning
基于Gradle构建,使用SpringBoot在各个场景的应用,包括集成消息中间件、前后端分离、数据库、缓存、分布式锁、分布式事务等
Stars: ✭ 340 (-15.42%)
Mutual labels:  thrift
Eureca.io
eureca.io : a nodejs bidirectional RPC that can use WebSocket, WebRTC or XHR fallback as transport layers
Stars: ✭ 341 (-15.17%)
Mutual labels:  rpc
Ananas
A C++11 RPC framework based on future and protobuf, with utility: timer,ssl,future/promise,log,coroutine,etc
Stars: ✭ 361 (-10.2%)
Mutual labels:  rpc
Go Api Boilerplate
Go Server/API boilerplate using best practices DDD CQRS ES gRPC
Stars: ✭ 373 (-7.21%)
Mutual labels:  rpc
Endpoints4s
Scala library to define HTTP-based communication protocols
Stars: ✭ 331 (-17.66%)
Mutual labels:  rpc
Akka Grpc
Akka gRPC
Stars: ✭ 361 (-10.2%)
Mutual labels:  rpc
Sleuth
A Go library for master-less peer-to-peer autodiscovery and RPC between HTTP services
Stars: ✭ 331 (-17.66%)
Mutual labels:  rpc
Easyrpc
EasyRPC是一个远程过程调用(Remote Procedure Call,简称RPC)的最小实现。它使用极少的类、方法演示了RPC的实现原理,是一个学习RPC工作原理的良好示例。
Stars: ✭ 329 (-18.16%)
Mutual labels:  rpc
Tonic
A native gRPC client & server implementation with async/await support.
Stars: ✭ 4,422 (+1000%)
Mutual labels:  rpc
Redeo
High-performance framework for building redis-protocol compatible TCP servers/services
Stars: ✭ 392 (-2.49%)
Mutual labels:  rpc

============ ThriftPy2

.. image:: https://travis-ci.com/Thriftpy/thriftpy2.svg?branch=develop :target: https://travis-ci.com/Thriftpy/thriftpy2

.. image:: https://img.shields.io/codecov/c/github/Thriftpy/thriftpy2.svg :target: https://codecov.io/gh/Thriftpy/thriftpy2

.. image:: https://img.shields.io/pypi/dm/thriftpy2.svg :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/v/thriftpy2.svg :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/pyversions/thriftpy2.svg :target: https://pypi.org/project/thriftpy2/

.. image:: https://img.shields.io/pypi/implementation/thriftpy2.svg :target: https://pypi.org/project/thriftpy2/

ThriftPy: https://github.com/eleme/thriftpy has been deprecated, ThriftPy2 aims to provide long term support.

Migrate from Thriftpy?

All you need is:

.. code:: python

import thriftpy2 as thriftpy

That's it! thriftpy2 is fully compatible with thriftpy.

Installation

Install with pip.

.. code:: bash

$ pip install thriftpy2

You may also install cython first to build cython extension locally.

.. code:: bash

$ pip install cython thriftpy2

Code Demo

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:

.. code:: python

import thriftpy2
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")

from thriftpy2.rpc import make_server

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:

.. code:: python

import thriftpy2
pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift")

from thriftpy2.rpc import make_client

client = make_client(pingpong_thrift.PingPong, '127.0.0.1', 6000)
print(client.ping())

And it also supports asyncio on Python 3.5 or later:

.. code:: python

import thriftpy2
import asyncio
from thriftpy2.rpc import make_aio_client


echo_thrift = thriftpy2.load("echo.thrift", module_name="echo_thrift")


async def request():
    client = await make_aio_client(
        echo_thrift.EchoService, '127.0.0.1', 6000)
    print(await client.echo('hello, world'))
    client.close()

.. code:: python

import asyncio
import thriftpy2

from thriftpy2.rpc import make_aio_server

echo_thrift = thriftpy2.load("echo.thrift", module_name="echo_thrift")


class Dispatcher(object):
    async def echo(self, param):
        print(param)
        await asyncio.sleep(0.1)
        return param


def main():
    server = make_aio_server(
        echo_thrift.EchoService, Dispatcher(), '127.0.0.1', 6000)
    server.serve()


if __name__ == '__main__':
    main()

See, it's that easy!

You can refer to 'examples' and 'tests' directory in source code for more usage examples.

Features

Currently ThriftPy have these features (also advantages over the upstream python lib):

  • Supports Python 2.7, Python 3.4+, PyPy and PyPy3.

  • Pure python implementation. No longer need to compile & install the 'thrift' package. All you need is thriftpy2 and thrift file.

  • Compatible with Apache Thrift. You can use ThriftPy together with the official implementation servers and clients, such as a upstream server with a thriftpy2 client or the opposite.

    Currently implemented protocols and transports:

    • binary protocol (python and cython)

    • compact protocol (python and cython)

    • json protocol

    • buffered transport (python & cython)

    • framed transport

    • tornado server and client (with tornado 4.0)

    • http server and client

    • asyncio support (python 3.5 or later)

  • Can directly load thrift file as module, the sdk code will be generated on the fly.

    For example, pingpong_thrift = thriftpy2.load("pingpong.thrift", module_name="pingpong_thrift") will load 'pingpong.thrift' as 'pingpong_thrift' module.

    Or, when import hook enabled by thriftpy2.install_import_hook(), you can directly use import pingpong_thrift to import the 'pingpong.thrift' file as module, you may also use from pingpong_thrift import PingService to import specific object from the thrift module.

  • Easy RPC server/client setup.

Contribute

  1. Fork the repo and make changes.

  2. Write a test which shows a bug was fixed or the feature works as expected.

  3. Make sure travis-ci or tox tests succeed.

  4. Send pull request.

Contributors

https://github.com/Thriftpy/thriftpy2/graphs/contributors

Sponsors:

.. image:: ./docs/jetbrains.svg :target: https://www.jetbrains.com/?from=ThriftPy

Changelog

https://github.com/Thriftpy/thriftpy2/blob/master/CHANGES.rst

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].