Skip to main content

Thrift server using gunicorn

Project description

gunicorn_thrift
===============

[![Build Status](https://travis-ci.org/eleme/gunicorn_thrift.svg?branch=master)](https://travis-ci.org/eleme/gunicorn_thrift)

Thrift app and worker for gunicorn!

## Why?

* graceful reload/shutdown.
* manage worker number at runtime.
* and everything else `gunicorn` has to offer.

## Supported Platforms

* Python 2.7, all worker classes
* Python 3.2+, `thriftpy_sync` worker class (neither gevent nor code generated
using the Thrift toolkit are supported on Python 3)

## Examples

### Using `thrift`

1. Generate thrift files:
```bash
% thrift --out tests/pingpong_sdk --gen py:new_style,utf8strings tests/pingpong.thrift
```

2. Write thrift app.

```python
#! /usr/bin/env python
# tests/app.py
# -*- coding: utf-8 -*-

from pingpong_sdk.pingpong import PingService

class PingpongServer(object):
def ping(self):
if os.environ.get('about_to_shutdown') == '1':
raise PingService.AboutToShutDownException
return "pong"

app = PingService.Processor(PingpongServer())
```

3. Fire up app.
```bash
% gunicorn_thrift tests.app:app -k thrift_sync
% gunicorn_thrift tests.app:app -k thrift_gevent
```

### Using `thriftpy`

1. Write thrift app.

```python
#! /usr/bin/env python
# tests/app.py
# -*- coding: utf-8 -*-

import thriftpy
from thriftpy.thrift import TProcessor

class PingPongDispatcher(object):
def ping(self):
return "pong"

pingpong_thrift = thriftpy.load("pingpong.thrift")
app = TProcessor(pingpong_thrift.PingService, PingPongDispatcher())
```

2. Fire up app.

```bash
% gunicorn_thrift tests.thriftpy_app:app -k thriftpy_sync \
--thrift-protocol-factory \
thriftpy.protocol:TCyBinaryProtocolFactory \
--thrift-transport-factory \
thriftpy.transport:TCyBufferedTransportFactory
```

## Configs

### Workers

Parameter: `-k`, `--worker-class`
Config file: `worker_class`
Default 2.7: `thrift_sync`
Default 3.2+: `thriftpy_sync`

There are 4 types of workers available.

* `thrift_sync`: sync worker.
* `thrift_gevent`: gevent worker.
* `thriftpy_sync`: sync worker, adapted for [`thriftpy`](https://github.com/eleme/thriftpy)
* `thriftpy_gevent`: gevent worker, adapted for [`thriftpy`](https://github.com/eleme/thriftpy)

note: If you want to use `thriftpy_sync` or `thriftpy_gevent`, make sure the following:

* Version of `thriftpy` should be higher than `0.1.10`.
* `--thrift-protocol-factory` should be set to either:
1. `thriftpy.protocol:TCyBinaryProtocolFactory` or
1. `thriftpy.protocol:TBinaryProtocolFactory`
* `--thrift-transport-factory` should be set to either:
1. `thriftpy.transport:TCyBufferedTransportFactory` or
1. `thriftpy.transport:TBufferedTransportFactory`


### Transport factory

The transport factory to use for handling connections.

Parameter: `--thrift-transport-factory`
Config file: `thrift_transport_factory`
Default 2.7: `thrift.transport.TTransport:TBufferedTransportFactory`
Default 3.2+: `thriftpy.transport:TBufferedTransportFactory`


### Protocol factory

The protocol factory to use for parsing requests.

Parameter: `--thrift-protocol-factory`
Config file: `thrift_protocol_factory`
Default 2.7: `thrift.protocol.TBinaryProtocol:TBinaryProtocolAcceleratedFactory`
Default 3.2+: `thriftpy.protocol:TBinaryProtocolFactory`

### Client timeout

Seconds to timeout a client if it is silent after this duration.

Parameter: `--thrift-client-timeout`
Config file: `thrift_client_timeout`
Default: `None` (Never time out a client)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gunicorn_thrift-0.2.15.tar.gz (6.3 kB view details)

Uploaded Source

Built Distribution

gunicorn_thrift-0.2.15-py2-none-any.whl (9.9 kB view details)

Uploaded Python 2

File details

Details for the file gunicorn_thrift-0.2.15.tar.gz.

File metadata

File hashes

Hashes for gunicorn_thrift-0.2.15.tar.gz
Algorithm Hash digest
SHA256 6a0919b51d354fd558035b67479b9bf41fbe5c96842fadfab38f433f7b4c5faa
MD5 c18840c409f2a25e6a6d9f2b8d362d80
BLAKE2b-256 0a918bbf15f2f60e69709c7f8dcc86a9be98953f65865729d14168e17aec1bce

See more details on using hashes here.

File details

Details for the file gunicorn_thrift-0.2.15-py2-none-any.whl.

File metadata

File hashes

Hashes for gunicorn_thrift-0.2.15-py2-none-any.whl
Algorithm Hash digest
SHA256 f94a8d6f8ba3e13785df801345b8b4c4640e63dcd72a02bbb4a93482b1ed82b1
MD5 2aff1ad36deb6cdc4ffb2a63be781f32
BLAKE2b-256 ff7dfbede4e07d502b75eaffe23599597e6c4a970672f5e4f4c59cced1ee151f

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page