1. 关于Gunicorn

Gunicorn是一个开源的Python WSGI HTTP服务器,移植于Ruby的Unicorn项目的采用pre-fork模式的服务器。Gunicorn服务器可与各种Web框架,包括django、flask、pyramid等。只要简单配置执行,轻量级的资源消耗,而且相当迅速。与各个Web结合紧密,部署很方便。缺点不支持HTTP 1.1,并发访问性能也不高。

关于WSGI:WSGI即Python Web server Gateway Interface,是Python专门的用于Python应用程序或框架与Web服务器之间的一种接口,没有官方的实现,因为WSGI更像一个协议,只要遵照这些协议,WSGI应用都可以在任何服务器上运行,反之亦然。

Gunicorn的特征:

  1. 支持WSGI,Django和Paster

  2. 自动化的工作进程管理

  3. 简单的Python配置

  4. 多工作者配置

  5. 多种服务器钩子以便扩展

  6. 兼容Python 2.x >=2.6 或 3.x >=3.2

2. 安装Gunicorn

a. 安装

pip install gunicorn

b. 运行

运行Gunicorn可以通过命令gunicorn或者与Django、Paster结合使用的gunicorn_django、gunicorn_paster来实现

gunicorn:使用该命令来运行一个不需要传输层的WSGI应用,基本语法:

gunicorn [OPTIONS] APP_MODULE

示例代码:

def app(environ, start_response):
"""Simplest possible application object"""
data = 'Hello, World!\n'
status = '200 OK'
response_headers = [
('Content-type','text/plain'),
('Content-Length', str(len(data)))
]
start_response(status, response_headers)
return iter([data])

执行命令:

gunicorn --workers=2 test:app

通过浏览器访问http://127.0.0.1:8000显示“Hello, World!”

3. Gunicorn架构

a. 服务器模式

Gunicorn基于pre-fork的工作者模式,即有一个中央master进程来管理一系列的工作进程,master并不知道各个独立客户端。所有的请求和响应完全由工作进程去完成。

master通过一个循环不断监听各个进程的信号并作出相应反应,这些信号包括TTIN、TTOU和CHLD。TTIN和TTOU告诉master增加或者减少正在运行的进程数,CHLD表明一个子进程被终止了,在这种情况下master进程会自动重启这个失败的进程。

b. 进程的同步和异步模式

默认情况下,Gunicorn的工作进程是同步执行的模式,即单个进程在某个时间只处理一个请求。同时,Gunicorn也支持Gevent、Eventlet来实现异步,通过--worker-class选项可以指定工作方式:

gunicorn --worker-class=gevent myapp:app

以下是官方列举的需要异步工作模式的情况:

  • Applications making long blocking calls (Ie, external web services)
  • Serving requests directly to the internet
  • Streaming requests and responses
  • Long polling
  • Web sockets
  • Comet

c. 进程数

Gunicorn只需要4-12个工作进程就能够每秒处理成百上千的请求,所以不需要扩充太多的进程数。

参考官方:Gunicorn

Gunicorn独角兽的更多相关文章

  1. Gunicorn快速入门

    Gunicorn (独角兽)是一个高效的Python WSGI Server,通常用它来运行 wsgi application(由我们自己编写遵循WSGI application的编写规范) 或者 w ...

  2. Python 目录【持续更新中】

    Python 基础 字符编码 数据类型 文件处理 流程控制 练习题 函数,递归 匿名函数.内置函数 装饰器变形记 函数装饰器 递归 二分法 迭代器和生成器 协程函数 列表表达式 生成器表达式 异常处理 ...

  3. python独角兽 Flask + Gunicorn

    1.构建程序运行所需的虚拟环境 安装Miniconda 创建虚拟环境 添加程序运行依赖包 添加Gunicorn依赖 方式一:最简单的使用 easy_install 安装或者更新 方式二:下载源码安装 ...

  4. Flask + Gunicorn + Nginx 部署

    最近很多朋友都在问我关于 Flask 部署的问题,说实在的我很乐意看到和回答这样的问题,至少证明了越来越多人开始用 Flask 了. 之前我曾发表过一篇在 Ubuntu 上用 uwsgi + ngin ...

  5. flask +gevent+nginx+Gunicorn+supervisor部署flask应用

    上篇   可以完美部署flask ,但是视乎在结合gevent+apscheduler 实现异步非阻塞后台和定时任务的时候视乎不是那么完美.请教了前辈,决定使用flask+gevent+nginx+g ...

  6. gunicorn工作原理

    gunicorn工作原理 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork ...

  7. gunicorn

    https://blog.csdn.net/jailman/article/details/78496522 gunicorn工作原理 Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Pyth ...

  8. 高性能框架gevent和gunicorn在web上的应用及性能测试

    WSGI Server有哪些: 比如 Flask,webpy,Django.CherryPy 都带着 WSGI server .当然性能都不好,自带的web server 更多的是测试用途, 发布时则 ...

  9. Ubuntu | Flask + Gunicorn + Nginx 部署服务器环境

    现在我们手里有一个准备发布的项目,那么如何将他上传到你的服务器,并让外网访问呢? 前提: 1. 安装了Python环境 apt-get install python-dev 2. 安装Flask pi ...

随机推荐

  1. pyqt二进制和图片的转换

    参考:http://blog.chinaunix.net/uid-28194872-id-3516936.html MySQL数据库要想插入图片,其字段需要是BLOB类型.BLOB (binary l ...

  2. 在Terminal中的光标的使用技巧

    如何简单操作? 在 Terminal(终端) 中,有许多操作技巧,这里就介绍几个简单的. 光标 up(方向键上) 可以调出输入历史执行记录,快速执行命令 down(方向键下) 配合 up 选择历史执行 ...

  3. Python中tab键自动补全功能的配置

    新手学习Python的时候,如何没有tab键补全功能,我感觉那将是一个噩梦,对于我们这种菜鸟来说,刚接触python,对一切都不了解,还好有前辈们的指导,学习一下,并记录下来,还没有学习这个功能小伙伴 ...

  4. SharePoint 2010 自定义页面出现“项目可能已被其他用户删除或重命名”问题跟踪

    异常详细信息: Microsoft.SharePoint.SPException: 位置 http://portal/Pages/ShowArticle.aspx?id=19&mylist=8 ...

  5. WPF 在事件中绑定命令

    导航:MVVMLight系列文章目录:<关于 MVVMLight 设计模式系列> 其实这也不属于MVVMLight系列中的东东了,没兴趣的朋友可以跳过这篇文章,本文主要介绍如何在WPF中实 ...

  6. 使用 MVVMLight 命令绑定

    首先,如果您希望了解更多的MVVMLight技术或希望有顺序的学习MVVMLight,请查阅目录<MVVMLight 设计模式系列使用文章>. 继上一篇文章的项目,我们实现了数据绑定到界面 ...

  7. TTCN中PTC的执行流程

    一些概念 Component(測试组件或者測试成分),TTCN接触下来最频繁的就是MTC(Main Test Component,主測试组件),在执行測试用例前,须要首先创建一个MTC.在testca ...

  8. Extjs学习笔记--(五,事件)

    Extjs中事件包括浏览器事件(单机按钮,鼠标移动等触发)和内部事件(组件之间的联动) 绑定浏览器事件的过程Ext.EventManager 要为元素绑定事件,通常会使用EventManager.on ...

  9. 在线学习angularjs2

    官网给的学习教程(需要FQ) http://campus.codeschool.com/courses/accelerating-through-angular-2/contents

  10. docker学习之-什么是docker

    docker是一个用来装应用的容器,就想杯子可以装水,笔筒可以装笔,书包可以放书一样,可以把网站放到docker里,可以把任何应用放到docker里.