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 应用。
Gunicorn 为何很重更要?
Gunicorn 是众多 WSGI 服务器实现之一,但它特别重要,因为它稳定,是web 应用部署 中常用组成部分,它驱动着一些世界上最大的基于 Python 的 web 应用,例如 Instagram。
Gunicorn 实现了 PEP3333 WSGI 服务器标准规范 接口,这样它就可以运行那些实现了应用接口的 Python web 应用。例如,假设你使用了诸如 Django、Flask、或 Bottle 这样的 web 框架 编写了一个 web 应用,那么你的应用就实现了 WSGI 规范。
Gunicorn 如何知道怎样运行我的 web 应用?
Gunicorn 根据在 WSGI 服务器和 WSGI 兼容的 web 应用之间的钩子知道如何运行 web 应用。
这儿有个例子,它说明了如何通过 Gunicorn 运行一个典型的 Django web 应用。 我们将以 dango_defaults 为例。在 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 项目首次创建时通过 django-admin.py startproject
命令生成的。
Django 通过 wsgi.py
文件暴露了一个 application
变量,这样 WSGI 服务器就可以使用 application
作为一个钩子来运行 web 应用。
下图是对这个情况的直观展示:
什么叫做“预分叉”工作者模型?
相对一个工作者模型结构,Gunicorn 是基于预分叉工作模型的。预分叉工作模型是指主线程使工作者自旋处理请求,却不控制这些工作者如何执行请求处理任务。每个工作者都独立于控制者。
Gunicorn 相关资源
在 Full Stack Python 博客 中有三篇针对框架的文章说明了如何在 Ubuntu 上配置 Gunicorn 用于开发:
Gunicorn 作为你的 Django 开发服务器 是一个短篇,含有一些使用 Gunicorn 用于本地应用开发的优秀建议。
全栈 Python 部署指南 提供了详细的指导步骤用于将 Gunicorn 作为一个完整 Python web 应用部署的一部分。
Flask 在 Nginx 和 Gunicorn 上 在部署中将 Gunicorn 和 Nginx web 服务器 在一起为一个 Flask 应用提供服务。
问题“使用 Gunicorn 运行 Django 的最佳实践是什么?”的答案 给出了一些在部署中 Gunicorn 如何调用 Django 提供的可调用应用变量的细微差别。
如何在 FreeBSD 10.2 上安装 Django 和 Gunicorn 以及 Nginx 是一个针对 FreeBSD 的教程,相对于 Ubuntu 和 CentOS 的教程,这个教程中的演示并不常见。
如何在 Ubuntu 14.04 上使用 Flask、Gunicorn 和 Nginx 制作一个可扩展的 Python web 应用 和 在 Ubuntu 上部署一个 Flask 应用), 这两篇文章都提供了在 Flask web 应用中设置使用 Gunicorn 的方法。 每篇教程都没有提供更多的说明,但它们在你使用 Ubuntu 遇到问题时仍然是非常好的准确参考。
使用 Supervisor 控制一个虚拟环境,并在该虚拟环境中设置 Django、Nginx 和 Gunicorn 是一个 GitHub Gist,非常好地说明了为何需要设置 virtualenv 以及在你部署时应当注意什么。