GUN使用,gunicorn有必要使用gevent么
1. 什么是Gunicorn
Gunicorn是一个WSGI HTTP服务器,python有一个web服务器叫做wsgiref。
Gunicorn的优势在于它使用了fork前工作者模式。当gunicorn启动时,它会提前在主进程中分叉出指定数量的工作进程来处理请求。
Gunicorn依靠操作系统提供负载平衡,推送的工作线程数为(2*$num_cores) 1。
我们知道,python是单线程语言,当进程被阻塞时,后续请求会排队等待处理。fork前工作模式大大增加了服务器请求负载。
2. gunicorn安装
由于Windows上不支持gunicorn,以下代码在Linux下有效!
前提是python安装并运行在虚拟环境中:
安装gunicorn执行:gunicorn -h
代表gunicorn执行成功!
3. 编写flask代码,flask-gunicorn.py代码如下
需要在虚拟环境中安装:
pip install flask-script
from Flask import Flask from Flask _ script import Manager app=Flask(_ _ name _ _)Manager=Manager(app)@ app . route(/)def index():if _ _ name _ _= _ _ main _ _ :Manager . run()
4. 使用gunicorn监听请求,运行以下命令
gunicorn -w 2 -b 127.0.0.1:4000烧瓶-gunicorn:app
运行结果:
-w:指定fork的工作进程数。
-b:指定绑定端口。
测试:模块名称,python文件名
应用程序:变量名,python文件中可调用的wsgi接口名
5. 访问web服务器
使用wsgiref和wsgiref访问wsgi接口。
6. gunicorn相关参数
1)-c配置,配置=配置
指定一个配置文件(py文件)
2)-b绑定,BIND=绑定
带有指定插座的顶板
3)-D,守护进程
在后台模式下运行gunicorn进程
4)-w工人,工人=工人
流程数量
5)-k工人阶级,工人阶级=工人阶级
工作类型,包括sync(默认)、eventlet、gevent、tornado、gthread、gaiohttp。
6)积压INT
最大挂起连接数
7)日志级别
输出水平
8)-访问-日志文件文件
访问日志输出文件
9)-错误-日志文件
错误日志输出文件
7. gunicorn参数配置文件
-c config,config=config指定一个配置文件(py文件)
Gunicorn可以写入配置文件。以下列表显示了如何编写配置文件gunicorn.conf.py
Bind=127.0.0.1:8000workers=2运行以下命令:
guni corn-c guni corn . conf . py flat-guni corn:App注:
如果报错 未找到gevent,需要在当前虚拟环境中安装模块:
pip安装事件
chdir 目录必须修改指向当前工作目录,日志文件指向路径必须可用
运行成功时命令行不会有输出
错误无法解决,试试清除当前文件目录的__pycache__文件夹和浏览器缓存
运行结果:
Gunicorn配置文件是一个python文件,因此可以实现更复杂的逻辑,如下所示:
# guni corn . conf . py import logging import logging . handlers from logging . handlers import watched file handler import OS import multi processing bind= 127。0.0.1:8000 #绑定ip和端口号backlog=512 #监听队列chdir=/home/python/pycharmprojects/news-information # guni corn切换到目标工作目录time out=30 # Worker _ class= gevent #使用gevent模式,或同步模式,默认为同步模式workers=multi processing . CPU _ count()* 21 #进程线程数=2 #指定每个进程打开的线程数loglevel=info # log level,指的级别access _ log _ format= %(t)s %(p)s %(h)s %(r)s %(s)s %(l)s %(b)s %(f)s %(a)s #设置不能在访问日志级别设置。错误日志不能按以下含义设置 :h远程地址l - u当前-,可能是将来版本中的用户名T请求状态行的日期(例如“get/HTTP/1.1 ` ”) s状态b响应长度或- f referer a用户代理T请求时间(秒)D请求时间(微秒)L请求时间(十进制秒)p进程id access log=/home/python/pycharm projects/news-information/log/guni corn _ access . log #访问日志文件error log=/access