1. 什么是Gunicorn
Gunicorn是一个WSGI HTTP服务器,python自带的有个web服务器,叫做wsgiref,
Gunicorn的优势在于,它使用了pre-fork worker模式,gunicorn在启动时,会在主进程中预先fork出指定数量的worker进程来处理请求,
gunicorn依靠操作系统来提供负载均衡,推进的worker数量是(2*$num_cores)+1
我们知道,python是单线程的语言,当进程阻塞时,后续请求将排队处理。所用pre-fork worker模式,极大提升了服务器请求负载。
2. gunicorn安装
由于Windows上不支持gunicorn,故以下代码在Linux下执行有效!
前提是安装好python,在虚拟环境中运行:

pip install gunicorn

执行:gunicorn -h

代表gunicorn执行成功!

3. 编写flask代码,flask-gunicorn.py代码如下
需要在虚拟环境中安装 :
pip install flask-script

from flask import Flask
from flask_script import Managerapp = Flask(__name__)
manager = Manager(app)@app.route("/")
def index():return "<h1>Hello world<h1>"if __name__ == '__main__':manager.run()

4. 使用gunicorn监听请求,运行以下命令

gunicorn -w 2 -b 127.0.0.1:4000 flask-gunicorn:app
运行结果:


-w:指定fork的worker进程数
-b:指定绑定的端口
test:模块名,python文件名
application:变量名,python文件中可调用的wsgi接口名称

5. 访问web服务器
和使用wsgiref,访问wsgi接口一致

6. gunicorn相关参数
1)-c CONFIG,–config=CONFIG
指定一个配置文件(py文件)
2)-b BIND,–bind=BIND
与指定socket进行板顶
3)-D,–daemon
后台进程方式运行gunicorn进程
4)-w WORKERS,–workers=WORKERS
工作进程的数量
5)-k WORKERCLASS,–worker-class=WORKERCLASS
工作进程类型,包括sync(默认),eventlet,gevent,tornado,gthread,gaiohttp
6)–backlog INT
最大挂起的连接数
7)–log-level LEVEL
日志输出等级
8)–access-logfile FILE
访问日志输出文件
9)–error-logfile FILE
错误日志输出文件

7. gunicorn参数配置文件
-c CONFIG,–config=CONFIG 指定一个配置文件(py文件)
gunicorn可以写在配置文件中,下面举列说明配置文件的写法,gunicorn.conf.py

bind = "127.0.0.1:8000"
workers = 2

运行以下命令:

 gunicorn -c gunicorn.conf.py flask-gunicorn:app

注意:

  1. 如果报错 未找到gevent,需要在当前虚拟环境中安装模块:

    pip install gevent

  2. chdir 目录必须修改指向当前工作目录,日志文件指向路径必须可用

  3. 运行成功时命令行不会有输出

  4. 错误无法解决,试试清除当前文件目录的__pycache__文件夹和浏览器缓存
    运行结果:


    gunicorn配置文件是一个python文件,因此可以实现更复杂的逻辑,如下:

     # gunicorn.conf.pyimport loggingimport logging.handlersfrom logging.handlers import WatchedFileHandlerimport osimport multiprocessingbind = '127.0.0.1:8000'  # 绑定ip和端口号backlog = 512  # 监听队列chdir = '/home/python/PycharmProjects/News-Information'  # gunicorn要切换到的目的工作目录timeout = 30  # 超时worker_class = 'gevent'  # 使用gevent模式,还可以使用sync 模式,默认的是sync模式workers = multiprocessing.cpu_count() * 2 + 1  # 进程数threads = 2  # 指定每个进程开启的线程数loglevel = 'info'  # 日志级别,这个日志级别指的是错误日志的级别,而访问日志的级别无法设置access_log_format = '%(t)s %(p)s %(h)s "%(r)s" %(s)s %(L)s %(b)s %(f)s" "%(a)s"'  # 设置gunicorn访问日志格式,错误日志无法设置"""其每个选项的含义如下:h          remote addressl          '-'u          currently '-', may be user name in future releasest          date of the requestr          status line (e.g. ``GET / HTTP/1.1``)s          statusb          response length or '-'f          referera          user agentT          request time in secondsD          request time in microsecondsL          request time in decimal secondsp          process ID"""accesslog = "/home/python/PycharmProjects/News-Information/log/gunicorn_access.log"  # 访问日志文件errorlog = "/home/python/PycharmProjects/News-Information/log/gunicorn_error.log"
    

Gunicorn-使用详解相关推荐

  1. Gunicorn配置详解

    通过gunicorn启动Flask项目的简单命令: gunicorn -w 4 -b 0.0.0.0:5000 app:app 其中-w设置最大进程数,-b绑定IP和端口,第一个app为app.py的 ...

  2. 【Gunicorn】gunicorn配置文件详解

    python常见的web部署搭配nginx+gunicorn,下面记录一下gunicorn的配置使用. 安装gunicorn pip install gunicorn gunicorn -h # 查看 ...

  3. gunicorn 安装部署详解

    Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server. 和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点. gunicorn 安装 ...

  4. Gunicorn 配置参数详解

    gunicorn示例 # gunicorn.conf # 并行工作进程数 workers = 4 # 指定每个工作者的线程数 threads = 2 # 监听内网端口5000 bind = '127. ...

  5. elastic stack 基础组件beats详解

    elastic stack 基础组件beats详解 fielbeat filebeat: spool_size: 1024 # 最大可以攒够 1024 条数据一起发送出去 idle_timeout: ...

  6. Django框架学习(一)Django框架安装和项目创建详解

    Django框架学习(一)Django框架安装和项目创建详解 文章目录 Django框架学习(一)Django框架安装和项目创建详解 一.简介 1.1介绍 1.2 URL 1.3.框架原理 二.安装 ...

  7. 微信小程序python flask_Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...

  8. Day 92 : Docker容器技术详解

    Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版 ...

  9. python定时任务每月1号_Python 定时任务框架 APScheduler 详解

    APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...

  10. Python Flask 搭建微信小程序后台详解

    前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...

最新文章

  1. 转:Java异常分类以及相应处理机制
  2. 微服务架构的常见问题
  3. 智能卡门禁管理系统_汉中停车场智能门禁系统简介,保安服务收费,行业知识
  4. jzoj4800-[GDOI2017模拟9.24]周末晚会【dp,循环重构】
  5. linux编程参数列表,Linux编程 14 文件权限(用户列表passwd,用户控制shadow,useradd模板与useradd命令参数介绍)...
  6. Tips--windows系统下gcc编译C文件为so共享库
  7. java动画迷宫寻路_[人工智能] 迷宫生成、寻路及可视化动画
  8. 前端关于html的面试题,关于java:前端面试HTML面试题汇总
  9. android 创建文件夹,文件需要注意的格式
  10. docker获取数据库时间相差8小时_Docker部署服务时间相差8小时解决方法
  11. python源码剖析_Python源码剖析的作品目录
  12. bat批量创建文件夹
  13. mac 磁盘分区 diskutil命令
  14. 嵌入式开发日记(6)——对串口数据读取的优化以及处理程序的改写
  15. 一份完整的数据分析师成长书单
  16. 微软通过云存储插件简化Docker容器迁移
  17. 客户消费积分管理系统的设计与实现
  18. 红帽linux9 iso,RedHat Linux9.0 ISO 原版下载
  19. sublime指定python版本
  20. 达沃时代的VNAS为NAS使用提供一种新可能

热门文章

  1. 怎么自定义PPT幻灯片大小
  2. 好用的一些功能性网站
  3. 如何通过API方式集成金蝶ERP
  4. 机器学习——马尔可夫模型及马尔可夫决策过程(MDP)
  5. linux 基金会 认证,Linux基金会宣布新的Linux认证计划
  6. 语法分析器(syntax analyzer)【Perl实现】
  7. android+反调试+方案,Android反调试笔记
  8. js钢琴(含钢琴按键音效包)
  9. php开启curl,给PHP安装和开启curl扩展
  10. IDEA+SSH :图书管理系统实现