Gunicorn 'Green Unicorn' is a Python WSGI HTTP Server for UNIX. It's a pre-fork worker model ported from Ruby's Unicorn project. The Gunicorn server is broadly compatible with various web frameworks, simply implemented, light on server resource usage, and fairly speedy.
Gunicorn requires Python 2.x >= 2.6 or Python 3.x >= 3.1.
Install from sources:
$ python setup.py install
Or from Pypi:
$ easy_install -U gunicorn
You may also want to install Eventlet or Gevent if you expect that your application code may need to pause for extended periods of time during request processing. Check out the FAQ for more information on when you'll want to consider one of the alternate worker types.
To install eventlet:
$ easy_install -U eventlet
After installing Gunicorn you will have access to the command line script gunicorn.
-c CONFIG, --config=CONFIG - Specify the path to a config file
-b BIND, --bind=BIND - Specify a server socket to bind. Server sockets can be any of $(HOST), $(HOST):$(PORT), or unix:$(PATH). An IP is a valid $(HOST).
-w WORKERS, --workers=WORKERS - The number of worker processes. This number should generally be between 2-4 workers per core in the server. Check the FAQ for ideas on tuning this parameter.
-k WORKERCLASS, --worker-class=WORKERCLASS - The type of worker process to run. You'll definitely want to read the production page for the implications of this parameter. You can set this to egg:gunicorn#$(NAME) where $(NAME) is one of sync, eventlet, gevent, or tornado. sync is the default.
-n APP_NAME, --name=APP_NAME - If setproctitle is installed you can adjust the name of Gunicorn process as they appear in the process system table (which affects tools like ps and top).
sync=gunicorn.workers.sync:SyncWorker eventlet=gunicorn.workers.geventlet:EventletWorker gevent=gunicorn.workers.ggevent:GeventWorker tornado
There are various other parameters that affect user privileges, logging, etc. You can see the complete list with the expected:
$ gunicorn -h
The first and most basic script is used to serve 'bare' WSGI applications that don't require a translation layer. Basic usage:
$ gunicorn [OPTIONS] APP_MODULE
Where APP_MODULE is of the pattern $(MODULE_NAME):$(VARIABLE_NAME). The module name can be a full dotted path. The variable name refers to a WSGI callable that should be found in the specified module.
Example with test app:
$ cd examples $ gunicorn --workers=2 test:app
We also provide integration for both Django and Paster applications.
gunicorn just needs to be called with a the location of a WSGI application object.:
gunicorn [OPTIONS] APP_MODULE
Where APP_MODULE is of the pattern MODULE_NAME:VARIABLE_NAME. The module name should be a full dotted path. The variable name refers to a WSGI callable that should be found in the specified module.
So for a typical Django project, invoking gunicorn would look like:
(This requires that your project be on the Python path; the simplest way to ensure that is to run this command from the same directory as your manage.py file.)
If you are a user/developer of a paste-compatible framework/app (as Pyramid, Pylons and Turbogears) you can use the gunicorn --paste option to run your application.
gunicorn --paste development.ini -b :8080 --chdir /path/to/project
It is all here. No configuration files nor additional python modules to write !!
Gunicorn is released under the MIT License. See the LICENSE file for more details.