Gunicorn运行flask

Gunicorn“绿色独角兽”是一个被广泛使用的高性能的Python WSGI UNIX HTTP服务器,移植自Ruby的独角兽(Unicorn )项目,使用pre-fork worker模式,具有使用非常简单,轻量级的资源消耗,以及高性能等特点。


安装gunicorn

pip install gunicorn

运行gunicorn

$ gunicorn [OPTIONS] 模块名:变量名

模块名是python文件名,可以是完整的路径+python文件名;变量名是python文件中可调用的WSGI(Web Server Gateway ).

直接运行:

#直接运行,默认启动的127.0.0.1::8000
gunicorn 运行文件名称:Flask程序实例名

指定进程和端口号: -w: 表示进程(worker)。 -b:表示绑定ip地址和端口号(bind)。

gunicorn -w 4 -b 127.0.0.1:5001 运行文件名称:Flask程序实例名

我的项目主入口manage.py:

import os

from flask_script import Manager
from flask_migrate import MigrateCommand

from App import create_app

# 环境变量,获取当前Flask环境
env = os.environ.setdefault('FLASK_ENV','devlop')

# 生成app
app = create_app(env)
manager = Manager(app)

# 给manage.py 添加数据库迁移的命令
manager.add_command('db',MigrateCommand)

if __name__ == '__main__':
    manager.run()

所以运行方式为:

gunicorn -w 4 -b 127.0.0.1:5001 manage:app

gunicron部署flask

不过在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_config.py manage: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_config.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 = './logs/gunicorn.pid'
errorlog = './logs/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 详细配置

常用配置参数:

  • -c CONFIG, --config=CONFIG     指定一个配置文件(py文件).
  • -b BIND, --bind=BIND    与指定socket进行绑定.
  • -D, --daemon     以守护进程形式来运行Gunicorn进程,其实就是将这个服务放到后台去运行。
  • -w WORKERS, --workers=WORKERS    工作进程的数量。上边提到gunicorn是一个pre-fork worker模式,就是指gunicorn启动的时候,在主进程中会预先fork出指定数量的worker进程在处理请求时,gunicorn依靠操作系统来提供负载均衡,通常推荐的worker数量是:(2 x $num_cores) + 1
  • -k WORKERCLASS, --worker-class=WORKERCLASS    工作进程类型. 包括 sync(默认), eventlet, gevent, or tornado, gthread, gaiohttp.
  • --backlog INT    最大挂起的连接数.
  • --chdir    切换到指定的工作目录.
  • --log-level LEVEL   输出error log的颗粒度
    • debug
    • info
    • warning
    • error
    • critical
  • --access-logfile FILE    确认要写入Access log的文件FILE. '-' 表示输出到标准输出.
  • --error-logfile FILE, --log-file FILE    确认要写入Error log的文件FILE. '-' 表示输出到标准错误输出.
-c CONFIG    : CONFIG,配置文件的路径,通过配置文件启动;生产环境使用;
-b ADDRESS   : ADDRESS,ip加端口,绑定运行的主机;
-w INT, --workers INT:用于处理工作进程的数量,为正整数,默认为1;
-k STRTING, --worker-class STRTING:要使用的工作模式,默认为sync异步,可以下载eventlet和gevent并指定
--threads INT:处理请求的工作线程数,使用指定数量的线程运行每个worker。为正整数,默认为1。
--worker-connections INT:最大客户端并发数量,默认情况下这个值为1000。
--backlog int:未决连接的最大数量,即等待服务的客户的数量。默认2048个,一般不修改;
-p FILE, --pid FILE:设置pid文件的文件名,如果不设置将不会创建pid文件

--access-logfile FILE   :  要写入的访问日志目录
--access-logformat STRING:要写入的访问日志格式
--error-logfile FILE, --log-file FILE  :  要写入错误日志的文件目录。
--log-level LEVEL   :   错误日志输出等级。

--limit-request-line INT   :  HTTP请求头的行数的最大大小,此参数用于限制HTTP请求行的允许大小,默认情况下,这个值为4094。值是0~8190的数字。
--limit-request-fields INT   :  限制HTTP请求中请求头字段的数量。此字段用于限制请求头字段的数量以防止DDOS攻击,默认情况下,这个值为100,这个值不能超过32768
--limit-request-field-size INT  :  限制HTTP请求中请求头的大小,默认情况下这个值为8190字节。值是一个整数或者0,当该值为0时,表示将对请求头大小不做限制

-t INT, --timeout INT:超过这么多秒后工作将被杀掉,并重新启动。一般设定为30秒;
--daemon: 是否以守护进程启动,默认false;
--chdir: 在加载应用程序之前切换目录;
--graceful-timeout INT:默认情况下,这个值为30,在超时(从接收到重启信号开始)之后仍然活着的工作将被强行杀死;一般使用默认;
--keep-alive INT:在keep-alive连接上等待请求的秒数,默认情况下值为2。一般设定在1~5秒之间。
--reload:默认为False。此设置用于开发,每当应用程序发生更改时,都会导致工作重新启动。
--spew:打印服务器执行过的每一条语句,默认False。此选择为原子性的,即要么全部打印,要么全部不打印;
--check-config   :显示现在的配置,默认值为False,即显示。
-e ENV, --env ENV: 设置环境变量

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配置。

 

 

 

 

 

 

 

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
gunicorn是一个用于部署Python Web应用程序的HTTP服务器。在这里,我们使用gunicorn来部署一个flask项目。flask是一个轻量级的Python Web框架,用于快速搭建Web应用程序。关于flask的使用细节不在本文的重点讨论范围内。 安装gunicorn非常简单,只需使用命令pip install gunicorn即可完成安装。具体命令如下: ``` pip install gunicorn ``` 安装完gunicorn后,可以通过以下命令运行gunicorn: ``` gunicorn [OPTIONS 模块名:变量名 ``` 以上是关于gunicornflask的简要介绍和安装步骤。有了gunicorn的支持,我们可以轻松地将flask应用程序部署到服务器上,并实现高性能的Web服务。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [基于gunicorn部署flask项目](https://blog.csdn.net/u012856866/article/details/119384985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [Gunicorn运行flask](https://blog.csdn.net/Woodrow1994/article/details/113831985)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值