美文网首页
Gunicorn的使用

Gunicorn的使用

作者: 飞跑的蛤蟆 | 来源:发表于2020-05-10 17:26 被阅读0次

在看Gunicorn之前先了解下,什么是WSGI。

WSGI是Python Web Server Gateway Interface的简称。WSGI标准在PEP333中定义并被许多框架实现,它规定了一种Web服务器与Web应用程序/框架之间推荐的标准接口,以确保Web应用程序在不同的Web服务器之间具有可移植性,可以让Web应用程序的开发者把精力集中到自己的领域。

客户端和服务器端进行沟通遵循了HTTP协议, 可以说HTTP就是它们之间沟通的语言。 从HTTP请求到我们的Web程序之间, 还有另外一个转换过程——从HTTP报文到WSGI规定的数据格式。 WSGI则可以视为WSGI服务器和我们的Web程序进行沟通的语言。

Gunicorn理论

Gunicorn“绿色独角兽”是一个被广泛使用的高性能的python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn)项目,使用pre-fork[1] worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。

Gunicorn是主流的WSGI容器之一,它易于配置,兼容性好,CPU消耗很少,它支持多种worker模式:

  • 同步worker:默认模式,也就是一次只处理一个请求。
  • 异步worker:通过Eventlet、Gevent实现的异步模式
  • 异步IOWorker:目前支持gthread和gaiohttp
  • Tronado worker:tornado框架

工作模式是通过work_class参数配置的值:缺省值:sync

  • sync
  • Gevent
  • Eventlet
  • tornado
  • gaiohttp
  • gthread

Sync Workers(sync)

最简单的同步工作模式

Async Workers(gevent,eventlet)

gevent和eventlet都是基于greenlet库,利用python协程实现的

Tornado Workers(tornado)

利用python Tornado框架实现

AsyncIO Workers(gthread,gaiohttp)

gaiohttp利用aiohttp库实现异步IO,支持web socket

gthread采用的事线程工作模式,利用线程池管理连接

Gunicorn使用

安装

pip install gunicorn

启动

gunicorn [OPTIONS] MODULE_NAME:VARIABLE_NAME 

一个简单的示例

# -*- encoding: utf-8 -*-
'''
@File    : app.py
@Time    : 2020/05/10 00:47:15
@Author  : Jesse Chang
@Contact : jessechang2358@gmail.com
@Version : 0.1
@License : Apache License Version 2.0, January 2004
@Desc    : None
'''


from flask import Flask

app = Flask(__name__)


@app.route('/')
def hello_world():
    return 'Hello'

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=8000)

可以使用以下命令启动应用:

gunicorn --workers=6 app:app -b 0.0.0.0:8888

  • --workers是开启的进程数量,推荐值是CPU个数*2+1,CPU个数的获取方式 [2]
  • 第一个app是模块文件的名字,如果包含文件夹可以使用.连接
  • 第二个app是文件中Flask实例的名字
  • -b 指定监听地址和端口

参考资料:

Flask 应用如何部署

gunicorn多种工作模式

【译】通过优化Gunicorn配置提高性能

Gunicorn运行与配置

Gunicorn的架构

Gunicorn设计


  1. Gunicorn基于pre-fork的工作者模式,即有一个中央master进程来管理一系列的工作进程,master并不知道各个独立客户端。所有的请求和响应完全由工作进程去完成。master通过一个循环不断监听各个进程的信号并作出相应反应,这些信号包括TTIN、TTOU和CHLD。TTIN和TTOU告诉master增加或者减少正在运行的进程数,CHLD表明一个子进程被终止了,在这种情况下master进程会自动重启这个失败的进程。

  2. 获取CPU个数python -c 'import multiprocessing;print(multiprocessing.cpu_count())'

相关文章

网友评论

      本文标题:Gunicorn的使用

      本文链接:https://www.haomeiwen.com/subject/arernhtx.html