gunicorn 详解
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 详解相关推荐
- gunicorn 安装部署详解
Gunicorn是一个unix上被广泛使用的高性能的Python WSGI UNIX HTTP Server. 和大多数的web框架兼容,并具有实现简单,轻量级,高性能等特点. gunicorn 安装 ...
- 【Gunicorn】gunicorn配置文件详解
python常见的web部署搭配nginx+gunicorn,下面记录一下gunicorn的配置使用. 安装gunicorn pip install gunicorn gunicorn -h # 查看 ...
- Gunicorn配置详解
通过gunicorn启动Flask项目的简单命令: gunicorn -w 4 -b 0.0.0.0:5000 app:app 其中-w设置最大进程数,-b绑定IP和端口,第一个app为app.py的 ...
- Gunicorn 配置参数详解
gunicorn示例 # gunicorn.conf # 并行工作进程数 workers = 4 # 指定每个工作者的线程数 threads = 2 # 监听内网端口5000 bind = '127. ...
- elastic stack 基础组件beats详解
elastic stack 基础组件beats详解 fielbeat filebeat: spool_size: 1024 # 最大可以攒够 1024 条数据一起发送出去 idle_timeout: ...
- Django框架学习(一)Django框架安装和项目创建详解
Django框架学习(一)Django框架安装和项目创建详解 文章目录 Django框架学习(一)Django框架安装和项目创建详解 一.简介 1.1介绍 1.2 URL 1.3.框架原理 二.安装 ...
- 微信小程序python flask_Python Flask 搭建微信小程序后台详解
前言: 近期需要开发一个打分的微信小程序,涉及到与后台服务器的数据交互,因为业务逻辑相对简单,故选择Python的轻量化web框架Flask来搭建后台程序.因为是初次接触小程序,经过一番摸索和尝试,个 ...
- Day 92 : Docker容器技术详解
Docker容器技术详解 Docker是基于Go语言开发的开源应用容器引擎,遵从Apache Licence 2.0协议,可以让开发者打包应用以及应用的依赖包到一个可移植的容器中,然后发布到各种发行版 ...
- python定时任务每月1号_Python 定时任务框架 APScheduler 详解
APScheduler 最近想写个任务调度程序,于是研究了下 Python 中的任务调度工具,比较有名的是:Celery,RQ,APScheduler. Celery:非常强大的分布式任务调度框架 R ...
最新文章
- 用!important解决IE和Mozilla的布局差别(转)
- python 打包egg_将Python程序打包到egg或WHL安装包或exe包中,把,python,成,或者,whl
- Django框架(7.Django中视图,url的配置)
- C - 3 求正弦值
- 从客户端...中检测到有潜在危险的 Request.Form 值
- 判别模型、生成模型与朴素贝叶斯方法
- 技术面试的《飞鸽传书2007绿色版下载》
- 随机样本一致性:一种用于图像分析和自动制图的模型拟合模型(5)--(P4P的解析解)
- virtual box 针对Unable to load R3 module 解决方案
- 学python报什么班好?Python培训班都有哪些学习方式?
- iOS开发警告The image set name xxx is used by multiple image sets.
- 高职院校计算机实验室管理的对策与思考
- 谭浩强《C语言程序设计第五版》第二章学习笔记
- 接口性能测试方案分析
- AMS1117和LM2596S芯片的问题总结
- android 图片编辑工具,照片编辑器:Photo Editor
- 【Unity3D实战】摇摆直升机开发实战(一)
- Cubic interpolation
- linux lzma命令,linux lzma安装
- mysql expire_mysql expire_logs_days是怎么生效和计算出来的
热门文章
- jQuery制作手风琴
- 主要的垂直搜索引擎分析
- 产品经理之如何快速阐释产品价值(FABE模型)
- 9、RH850 SPI(CSIH) 通讯功能和配置
- Jackknife,Bootstraping, bagging, boosting, AdaBoosting, Random forest 和 gradient boosting的区别
- LevelDb(四):LevelDb的Compaction操作
- python ---- 图像小波变换DWT
- 适合有编程基础的人看的《韩顺平零基础30天学java》笔记(P104~P129)
- 再也不写个人日记了,再也...
- 用java编国际象棋3之将军与悔棋