libs/gunicorn_wrapper.py (34 lines of code) (raw):
import multiprocessing
from gunicorn.six import iteritems
import gunicorn.app.base
class StandaloneApplication(gunicorn.app.base.BaseApplication):
def __init__(self, wsgi_app, port, debug=False):
self.port = port
self.debug = debug
self.wsgi_app = wsgi_app
if self.debug:
self.log_level = "debug"
else:
self.log_level = "info"
self.num_workers = (multiprocessing.cpu_count() * 2) + 1
self.options = {
"bind": "%s:%s" % ("0.0.0.0", self.port),
"worker_class": "gevent",
"workers": self.num_workers,
"worker_connections": 100,
"timeout": 60,
"keepalive": 10,
"loglevel": self.log_level,
"spew": self.debug,
"accesslog": "-",
"errorlog": "-",
"access_log_format": '%(t)s %(h)s %(l)s %(u)s "%(r)s" %(s)s %(b)s %(L)s "%(f)s" "%(a)s"'
}
super(StandaloneApplication, self).__init__()
def load_config(self):
config = dict([(key, value) for (key, value) in iteritems(self.options)
if key in self.cfg.settings and value is not None])
for key, value in iteritems(config):
self.cfg.set(key.lower(), value)
def load(self):
return self.wsgi_app