绿独角兽Green Unicorn (Gunicorn)

Green Unicorn,一般简写成”Gunicorn”,是一个Web Server Gateway Interface (WSGI) server,用来运行Python web应用。

Official Green Unicorn (Gunicorn) logo.

为什么Gunicorn重要?

Gunicorn是许多个WSGI服务器中的一个。稳定,常用作web部署,支持了一些世界上最大型的Python web应用如Instagram

Gunicorn 执行EP3333 WSGI server standard specification规范。比如,如果你用Django, Flask 或 Bottle等框架写了一个web应用,那么你的应用就是执行了WSGI规范。

Gunicorn如何知道该如何运行我的web应用?

Gunicorn 知道该如何运行一个web应用,是基于WSGI服务器和WSGI兼容web应用两者之间的一个钩子hook。

下面是一个典型的Djangoweb应用,被Gunicorn运行。我们使用django_defaults 作为一个Django项目。django_defaults项目内的子目录下,有一个wsgi.py文件,内容如下:

"""
WSGI config for django_defaults project.

It exposes the WSGI callable as a module-level variable named ``application``.

For more information on this file, see
https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
"""

import os

from django.core.wsgi import get_wsgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_defaults.settings")

application = get_wsgi_application()

wsgi.py 文件通过命令django-admin.py startproject ,在Django项目创建的时候被创建。Django 通过 wsgi.py 文件生成一个application 变量,这样WSGI服务器就把 application 作为一个hook来运行这个web应用,如下图所示:

Gunicorn WSGI server invoking a Django WSGI application.

什么是”pre-fork”工人模型worker model?

Gunicorn 基于pre-fork worker model。The pre-fork worker model意味着主线程唤起工人去处理请求,但是不控制工人如何处理这些请求。每个工人都独立于控制者。

Gunicorn资源