Run Gunicorn with Gevent


1 min read

Gunicorn + Gevent

If you already have a wsgi application written in Flask/Django/Webpy, and you want to run it with gunicorn, suppose your application variable is in file:

$ pip install gunicorn
$ gunicorn -w 2 wsgi:application

By default guicorn is running in sync mode, if your application is I/O bound, use gevent mode may increase its performance:

$ pip install gunicorn
$ pip install gevent
$ gunicorn -w 2 -k gevent wsgi:application

You don't even need to change your code. If you searched this, some other articles may mention you need to add code to do a "monkey patch", e.g. if your gunicorn's configure file is, then add this to that file:

from gevent import monkey

BUT you really don't need to add this, because gunicorn will auto path this, here is the code snippet from gunicorn:

from gevent import hub, monkey, socket, pywsgi

class GeventWorker(AsyncWorker):
    def patch(self):

    def init_process(self):

So you can see in the init_process function, guinicorn will call the patch function, which will call the monkey.patch_all() function.

In short, to run gunicorn with gevent, you only need to install the gevent package and change the worker_class to be "gevent".