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

gunicorn 安装

pip install gunicorn

gunicorn + flask 简单示例

flask程序需要先安装flask module,pip install flask。

gunicorn_demo.py

from flask import Flaskapp = Flask(__name__)@app.route('/demo', methods=['GET'])
def demo():return "gunicorn and flask demo."

通过gunicorn运行flask app

# gunicorn gunicorn_demo:app
[2017-12-23 10:36:09 +0000] [24441] [INFO] Starting gunicorn 19.7.1
[2017-12-23 10:36:09 +0000] [24441] [INFO] Listening at: http://127.0.0.1:8000 (24441)
[2017-12-23 10:36:09 +0000] [24441] [INFO] Using worker: sync
[2017-12-23 10:36:09 +0000] [24446] [INFO] Booting worker with pid: 24446

测试结果

# curl http://127.0.0.1:8000/demo
gunicorn and flask demo.

gunicorn 部署

gunicorn是一个wsgi http server,可以如上一章节所示直接起停,提供http服务。

不过在production环境,起停和状态的监控最好用supervisior之类的监控工具,然后在gunicorn的前端放置一个http proxy server, 譬如nginx。

下面是supervisor和nginx的配置。

supervisor_gunicorn.conf

[program:gunicorn_demo]
process_name=%(program_name)s
numprocs=1
priority=901
directory = /opt/gunicorn_demo/
command = /opt/virtualenv/bin/python /opt/virtualenv/bin/gunicorn -c gunicorn_demo.py gunicorn_demo:app
autostart = true
startsecs = 20
autorestart = true
startretries = 3
user = root
redirect_stderr = true
stdout_logfile_maxbytes = 20MB
stdout_logfile_backups = 10
stdout_logfile = /dev/null

-c gunicorn_demo.py, 即是gunicorn本身的配置文件,下面是gunicorn的基本配置,下一章节会详细说明gunicorn的配置项。

import multiprocessingbind = '127.0.0.1:8000'
workers = multiprocessing.cpu_count() * 2 + 1backlog = 2048
worker_class = "gevent"
worker_connections = 1000
daemon = False
debug = True
proc_name = 'gunicorn_demo'
pidfile = './log/gunicorn.pid'
errorlog = './log/gunicorn.log'

nginx.conf part

server {listen 80;server_name sam_rui.com;access_log  /var/log/nginx/access.log;location / {proxy_pass http://127.0.0.1:8000;proxy_set_header Host $host;proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;}
}

gunicorn 详细配置

gunicorn配置项可以通过gunicorn的启动命令行中设定,也可以通过配置文件指定。强烈建议使用一个配置文件。

配置项如下:

server socket

  • bind
    监听地址和端口。

  • backlog
    服务器中在pending状态的最大连接数,即client处于waiting的数目。超过这个数目, client连接会得到一个error。
    建议值64-2048。

worker 进程

  • workers
    worker进程的数量。建议值2-4 x $(NUM_CORES), 缺省为1。

  • worker_class
    worker进程的工作方式。 有 sync, eventlet, gevent, tornado, gthread, 缺省值sync。

  • threads
    工作进程中线程的数量。建议值2-4 x $(NUM_CORES), 缺省值1。
    此配置只适用于gthread 进程工作方式, 因为gevent这种使用的是协程工作方式。

  • worker_connections
    客户端最大同时连接数。只适用于eventlet, gevent工作方式。

  • max_requests
    worker重启之前处理的最大requests数, 缺省值为0表示自动重启disabled。主要是防止内存泄露。

  • max_requests_jitter
    抖动参数,防止worker全部同时重启。

  • timeout
    通常设为30。

  • graceful_timeout
    接收到restart信号后,worker可以在graceful_timeout时间内,继续处理完当前requests。

  • keepalive
    server端保持连接时间。

security

  • limit_request_line
    http request line最大字节数。值范围0-8190, 0表示无限制。

  • limit_request_field
    http request中 header字段数的最大值。缺省为100,最大32768。

  • limit_request_field_size
    http request header字段最大字节数。0表示无限制。

调试

  • reload
    当代码有修改时,自动重启workers。适用于开发环境。

  • reload_extra_files
    扩展reload配置,增加templates,configurations等文件修改监控。

  • spew
    跟踪程序执行的每一行。

  • check_config
    检查配置。

server 机制

  • sendfile
    系统底层拷贝数据方式,提供performance。

  • chdir
    在app加载之前,进入到此目录。

  • daemon
    应用是否以daemon方式运行。

  • raw_env
    key=value, 传递环境参数。

  • pidfile
    pid存储文件路径。

  • worker_tmp_dir
    临时工作目录。

  • user
    指定worker进程的运行用户名。

  • group
    指定worker进程运行用户所在组。

  • umask
    gunicorn创建文件的缺省权限。

  • pythonpath
    附加到python path的目录列表。

日志

  • accesslog
    访问日志文件路径。

  • access_log_format
    日志格式。 例如 %(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s" 。

  • errorlog
    错误日志路径。

  • loglever
    日志级别。debug, info, warning, error, critical.

  • capture_output
    重定向stdout/stderr到error log file。

  • logger_class
    日志实现类。缺省gunicorn.glogging.Logger 。

  • logconfig
    日志配置文件。同python标准日志模块logging的配置。

进程名

  • proc_name
    设置进程名(setproctitle),在ps,top等命令中会看到. 缺省值为default_proc_name配置。

server钩子

  • on_starting
  • on_reload
  • when_ready
  • pre_fork
  • post_fork
  • post_worker_init
  • worker_init
  • worker_abort
  • pre_exec
  • pre_request
  • post_request
  • child_exit
  • worker-exit
  • nworkers_changed
  • on_exit

作者:慢手暗夜
链接:https://www.jianshu.com/p/69e75fc3e08e
来源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

gunicorn 详解相关推荐

  1. gunicorn 安装部署详解

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

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

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

  3. Gunicorn配置详解

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

  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 ...

最新文章

  1. 用!important解决IE和Mozilla的布局差别(转)
  2. python 打包egg_将Python程序打包到egg或WHL安装包或exe包中,把,python,成,或者,whl
  3. Django框架(7.Django中视图,url的配置)
  4. C - 3 求正弦值
  5. 从客户端...中检测到有潜在危险的 Request.Form 值
  6. 判别模型、生成模型与朴素贝叶斯方法
  7. 技术面试的《飞鸽传书2007绿色版下载》
  8. 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(5)--(P4P的解析解)
  9. virtual box 针对Unable to load R3 module 解决方案
  10. 学python报什么班好?Python培训班都有哪些学习方式?
  11. iOS开发警告The image set name xxx is used by multiple image sets.
  12. 高职院校计算机实验室管理的对策与思考
  13. 谭浩强《C语言程序设计第五版》第二章学习笔记
  14. 接口性能测试方案分析
  15. AMS1117和LM2596S芯片的问题总结
  16. android 图片编辑工具,照片编辑器:Photo Editor
  17. 【Unity3D实战】摇摆直升机开发实战(一)
  18. Cubic interpolation
  19. linux lzma命令,linux lzma安装
  20. mysql expire_mysql expire_logs_days是怎么生效和计算出来的

热门文章

  1. jQuery制作手风琴
  2. 主要的垂直搜索引擎分析
  3. 产品经理之如何快速阐释产品价值(FABE模型)
  4. 9、RH850 SPI(CSIH) 通讯功能和配置
  5. Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Random forest 和 gradient boosting的区别
  6. LevelDb(四):LevelDb的Compaction操作
  7. python ---- 图像小波变换DWT
  8. 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P104~P129)
  9. 再也不写个人日记了,再也...
  10. 用java编国际象棋3之将军与悔棋