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)
===============
[![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
Release history Release notifications | RSS feed
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.4.tar.gz
(6.1 kB
view details)
Built Distribution
File details
Details for the file gunicorn_thrift-0.2.4.tar.gz
.
File metadata
- Download URL: gunicorn_thrift-0.2.4.tar.gz
- Upload date:
- Size: 6.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 3e2714f2cf61a9713378d00064bcab774c112ace3d2d39c2013f36941ef5e1fd |
|
MD5 | fbb31e4738b5539e3b920e5fbe44b5d1 |
|
BLAKE2b-256 | 8b132091291ede7c14823176dcf26a4ef36c8f109b0d41f064288d3da589d4e5 |
File details
Details for the file gunicorn_thrift-0.2.4-py2-none-any.whl
.
File metadata
- Download URL: gunicorn_thrift-0.2.4-py2-none-any.whl
- Upload date:
- Size: 9.7 kB
- Tags: Python 2
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ab0dff9d5a6603fd8ac8b2fba28631a7ad5638fe3d8bc32fb599e04a33635ee2 |
|
MD5 | ee83770e098d19fee14c62aa39aa7317 |
|
BLAKE2b-256 | 5f30d7064bd45dd1937baab0bc5a0f70076a733f297b4dfff274f238efe176f9 |