gunicorn 使用教程

22 篇文章 1 订阅

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 Flask

app = 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 multiprocessing

bind = '127.0.0.1:8000'
workers = multiprocessing.cpu_count() * 2 + 1

backlog = 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 部分配置

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 hook

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值