GUN使用,gunicorn有必要使用gevent么

  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

GUN使用,gunicorn有必要使用gevent么