什么是Gunicorn?Gunicorn(绿色独角兽)是一个用于UNIX的Python WSGI HTTP服务器 。这是从Ruby的Unicorn项目移植来的一个前fork工作器模型 。Gunicorn服务器广泛兼容各种web框架,并具有实现简单,轻量级,高性能等特点 。它用来解析HTTP请求的网关服务 。它通常是在进行反向代理(如Nginx),或者进行负载均衡(如 AWS ELB)和一个web 应用(比如 Django 或者 Flask)之间 。它的运行模型基于pre-fork worker 模型,即就是支持eventlet,也支持greenlet 。Gunicorn服务器作为wsgi App的容器,能够与各种 Web 框架兼容(flask,django 等,得益于gevent 等技术,使用Gunicorn能够在基本不改变wsgi app 代码的前提下,大幅度提高 wsgi app的性能 。目前Gunicorn最新版本为20.1.0,官方文档地址:
https://docs.gunicorn.org/en/20.1.0/,如下图:
文章插图
Gunicorn 20.1.0官方文档
静态资源可以使用nigix,动态资源使用Gunicorn,结构如下图:
文章插图
nigix+Gunicorn结构
与uWSGI的性能比较,Gunicorn性能表现突出,如下图:
文章插图
与uWSGI的性能比较
Gunicorn特点:
1.本身支持WSGI、web2py、Django和Paster,能和大多数的Python Web框架兼容
2.自动辅助进程管理
3.简单的Python配置
4.允许配置多个工作环境
5.各种服务器的可扩展钩子
6.兼容Python 3 。x > = 3.5
7.简单易上手,轻量级的资源消耗
不过目前gunicorn只能运行在linux环境中,不支持windows平台 。
Python自带的有个web服务器:wsgiref,Python是单进程的语言,当进程阻塞时,后续请求将排队处理,因此在生产环境不会使用单进程的Web服务器 。Gunicorn的优势在于,它使用了pre-fork worker模式,也就意味着有一个中心管理进程(master process)用来管理worker进程集合 。Master从不知道任何关于客户端的信息 。所有的请求和响应处理都是由worker进程来处理的 。Master(管理者)主程序是一个简单的循环,监听各种信号以及相应的响应进程 。master 管理着正在运行的 worker 集合,通过监听各种信号比如TTIN,TTOU,and CHLD. TTIN and TTOU 响应的增加和减少worker的数目 。CHLD信号表明一个子进程已经结束了,在这种情况下master会自动地重启失败的 worker 。gunicorn在启动时,会在主进程中预先fork出指定数量的worker进程来处理请求,gunicorn依靠操作系统来提供负载均衡,推进的worker数量是(2*核数)+1,比如2核的CPU,则worker数量为2*2+1=5 。
注:master进程不是管理处理请求的,只负责管理worker进程,比如对worker进程的创建、销毁、以及根据负载情况增减 。(启动时设置的–workers参数只是worker数,而gunicorn还会创建个master进程 。所以,即使配置workers为1,你的app也至少有两个进程:master负责管理,worker负责处理请求) 。
对于Gunicorn来说,gunicorn是WSGI的实现,但同时也自带web server,能直接对外提供web服务 。包括大部分的web app框架,比如Flask和Django也都带有web server 。但是,在生产环境中,一般它们都是各司其职的,Web框架Flask、Django只用于写app、Gunicorn只用于运行和管理Python web app,而在它们有专门的web server,比如Nginx 。
Gunicorn支持多种worker_class工作模式,默认使用sync,具体如下:
1.sync:同步的工作模式,性能最差
2.eventlet: 协程的工作模式
3.gevent: 协程的工作模式
4.tornado:基于tornado
5.gthread: 多线程模式 利用线程池管理连接
6.gaiohttp:基于aiohttp
安装Gunicorn,前提需要安装好Python:
pip install gunicorn
执行:gunicorn -h,执行成功如下图:文章插图
gunicorn执行成功
查看gunicorn的版本如下:
pip show gunicorn
文章插图
查看gunicorn的版本
如果想让Gunicorn支持异步workers的话,需要安装一下三个python包:
pip install greenletpip install eventletpip install gevent
Apache Superset是一个开源的、现代的、轻量级BI分析工具,能够对接多种数据源、拥有丰富的图标展示形式、支持自定义仪表盘,且拥有友好的用户界面,十分易用 。具体可以参考我之前写的几篇关于Superset的文章:1.《一个开源免费高颜值的轻量级商业智能BI平台Superset 介绍》
推荐阅读
- AI 技术驱动的创意图像编辑器
- 头条99天收入1万,新手必看的8个建议,可以让你快速实现经济独立
- 红茶的功效有哪些,红茶有什么功效和作用吗
- 编程语言将走入怎样的 2022
- 喝红茶解中药吗,喝中药能喝的茶有哪些功效与作用吗
- 红茶加盐功效,川断茶的功效与作用
- 大红茶功效与作用,安徽大叶子茶的功效与作用
- 今日头条千粉有哪些权益?
- 英红九号红茶批发商,英红九号红茶的功效与作用
- 解决局域网打印机不能共享的问题