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 avaiable.

* `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 `thriftpy.protocol:TCyBinaryProtocolFactory` or `thriftpy.protocol:TBinaryProtocolFactory`
* `--thrift-transport-factory` should be set to either `thriftpy.transport:TCyBufferedTransportFactory` or `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.11.tar.gz (6.2 kB view details)

Uploaded Source

Built Distribution

gunicorn_thrift-0.2.11-py2-none-any.whl (9.8 kB view details)

Uploaded Python 2

File details

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

File metadata

File hashes

Hashes for gunicorn_thrift-0.2.11.tar.gz
Algorithm Hash digest
SHA256 e6d2978025e05dd39dc345bec2de214636b1f4f93f62347d2def6d93f56bae1f
MD5 63a1007d3d3e90ef849646f06ca3f14e
BLAKE2b-256 df03f62190d010c197c82f4e388cc4d2a6cc789109ab065395075fe2d584e9ad

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for gunicorn_thrift-0.2.11-py2-none-any.whl
Algorithm Hash digest
SHA256 188551f1c740abfbe3289718cc97fdde47a84758d6b9b5ac1cf516be6d5fd895
MD5 883e392a3039cc9110cd685b8e3d0a66
BLAKE2b-256 c4b3974a3f8e3ee1bdebaa46828df9d7d5ddb60497c96066b0cadac2a45f4092

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