flask: 用gunicorn部署flask项目

一,安装第三方库

$ pip3 install gunicorn gevent

二,使用

-D 后台运行(守护进程)

-b 指定绑定地址和端口

-w 设置 4 个工作进程

$ gunicorn -D -b 127.0.0.1:8000 -w 4 app:app

测试 效果:

用ss查看端口是否已使用:

$ ss -lntp
State            Recv-Q           Send-Q                           Local Address:Port                        Peer Address:Port           Process                                                                                                                                  
LISTEN           0                2048                                 127.0.0.1:8000                             0.0.0.0:*               users:(("gunicorn",pid=5045,fd=5),("gunicorn",pid=5044,fd=5),("gunicorn",pid=5043,fd=5),("gunicorn",pid=5042,fd=5),("gunicorn",pid=5041,fd=5))

 

三,关闭进程

用kill即可

image

四,使用配置文件方式启动

配置文件:

# gunicorn_config.py
import multiprocessing
import os

# 是否开启debug模式
debug = True

# =============== 网络配置 ===============
bind = "127.0.0.1:8000"  # Gunicorn 监听地址
backlog = 2048  # 连接队列长度

# =============== 工作进程 ===============
workers = multiprocessing.cpu_count() * 2 + 1
worker_class = "gevent"
worker_connections = 1000  # gevent 模式下最大并发连接数
max_requests = 1000  # 每个 Worker 处理 N 次请求后重启(防内存泄漏)
max_requests_jitter = 100  # 随机抖动,避免雪崩式重启
timeout = 30  # 请求超时(秒)
keepalive = 5  # Keep-Alive 时间

# =============== 进程管理 ===============
preload_app = True  # 预加载应用,减少 Worker 启动时间
daemon = False  # 由 systemd 管理,不启用守护模式
pidfile = "logs/gunicorn.pid"
proc_name = "flask-gunicorn"

# =============== 日志配置 ===============
loglevel = "info"
accesslog = "logs/access.log"
errorlog = "logs/error.log"
access_log_format = '%(h)s %(l)s %(u)s %(t)s "%(r)s" %(s)s %(b)s "%(f)s" "%(a)s"'

# =============== 安全与资源 ===============
limit_request_line = 4094  # 请求行最大长度
limit_request_fields = 100  # 请求头字段最大数量
limit_request_field_size = 8190  # 请求头字段最大大小

# 是否后台运行,这一行要放在最下面
daemon = True
# =============== 用户与权限 ===============
# user = "www-data"
# group = "www-data"
# umask = 0o007                   # 创建文件的权限掩码

# =============== 启动前/后钩子 ===============
def when_ready(server):
    print("✅ Gunicorn 服务已启动,PID:", server.pid)


def pre_fork(server, worker):
    print(f"🔧 Worker {worker.pid} 正在 fork...")


def post_fork(server, worker):
    print(f"✅ Worker {worker.pid} 已启动")


def worker_int(worker):
    print(f"⚠️  Worker {worker.pid} 被中断")


def worker_abort(worker):
    print(f"💥 Worker {worker.pid} 被强制终止")

启动命令

$ gunicorn -c gunicorn_config.py app:app

 

posted @ 2025-11-09 10:37  刘宏缔的架构森林  阅读(29)  评论(0)    收藏  举报