title: Green Unicorn (Gunicorn) category: page slug: green-unicorn-gunicorn sortorder: 0724 toc: False sidebartitle: Green Unicorn (Gunicorn) meta: Green Unicorn (Gunicorn) 是一个 Python WSGI 服务器,它会运行 Python web 应用代码。 translators: blog.chriscabin.com updated: 2016-08-01 15:40

Green Unicorn (Gunicorn)

Green Unicorn,通过常简称“Gunicorn”,它是 Web 服务器网关接口(WSGI)服务器的一种实现,通常用于运行 Python web 应用。

Official Green Unicorn (Gunicorn) logo.

Gunicorn 为何很重更要?

Gunicorn 是众多 WSGI 服务器实现之一,但它特别重要,因为它稳定,是web 应用部署 中常用组成部分,它驱动着一些世界上最大的基于 Python 的 web 应用,例如 Instagram

Gunicorn 实现了 PEP3333 WSGI 服务器标准规范 接口,这样它就可以运行那些实现了应用接口的 Python web 应用。例如,假设你使用了诸如 DjangoFlask、或 Bottle 这样的 web 框架 编写了一个 web 应用,那么你的应用就实现了 WSGI 规范。

Gunicorn 是WSGI 服务器 概念的一种实现。在部署 章节学习如何将这些部分组合在一起,或者查看所有主题的目录

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

Gunicorn 根据在 WSGI 服务器和 WSGI 兼容的 web 应用之间的钩子知道如何运行 web 应用。

这儿有个例子,它说明了如何通过 Gunicorn 运行一个典型的 Django web 应用。 我们将以 dango_defaults 为例。在 django_defaults 项目目录中,有一个短的 wsgi.py 文件含有下面的内容:

  1. """
  2. WSGI config for django_defaults project.
  3. It exposes the WSGI callable as a module-level variable named ``application``.
  4. For more information on this file, see
  5. https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/
  6. """
  7. import os
  8. from django.core.wsgi import get_wsgi_application
  9. os.environ.setdefault("DJANGO_SETTINGS_MODULE", "django_defaults.settings")
  10. application = get_wsgi_application()

wsgi.py 文件是在 Django 项目首次创建时通过 django-admin.py startproject 命令生成的。 Django 通过 wsgi.py 文件暴露了一个 application 变量,这样 WSGI 服务器就可以使用 application 作为一个钩子来运行 web 应用。 下图是对这个情况的直观展示:

Gunicorn WSGI server invoking a Django WSGI application.

什么叫做“预分叉”工作者模型?

相对一个工作者模型结构,Gunicorn 是基于预分叉工作模型的。预分叉工作模型是指主线程使工作者自旋处理请求,却不控制这些工作者如何执行请求处理任务。每个工作者都独立于控制者。

Gunicorn 相关资源