Python + Gunicorn框架

1. Gunicorn 简介

  • 全称:Green Unicorn

  • 作用:Python WSGI HTTP 服务器,用于部署 Python Web 应用(如 Flask、Django、FastAPI 等)

  • 特点

    • 支持 多进程,每个 worker 独立运行,充分利用多核 CPU
    • 支持 多种 worker 类型(同步、异步、协程)
    • 与 Nginx 等反向代理结合使用常见

2. 安装

1
pip install gunicorn

3. 基本用法

假设你的 Flask 应用在 app.py 中:

1
2
3
4
5
6
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
return 'Hello Gunicorn!'

启动 Gunicorn:

1
gunicorn app:app

解释:

  • 第一个 app → 文件名 app.py(不需要 .py 后缀)
  • 第二个 app → Flask 实例名

常用启动参数

参数 说明 示例
-w / --workers worker 数量,通常 = CPU 核心数 × 2 + 1 -w 4
-b / --bind 绑定地址和端口 -b 0.0.0.0:8000
--worker-class worker 类型(sync, gevent, uvicorn.workers.UvicornWorker) --worker-class gevent
--timeout worker 超时时间(秒) --timeout 30
--access-logfile 访问日志 --access-logfile access.log
--error-logfile 错误日志 --error-logfile error.log
--reload 开发模式自动重载 --reload

示例:

1
gunicorn -w 4 -b 0.0.0.0:8000 --timeout 60 --access-logfile access.log app:app

4. Worker 类型

  • sync(默认):每个 worker 同时只处理一个请求,适合 CPU 轻量型任务
  • gevent / eventlet:基于协程,适合 I/O 密集型应用
  • uvicorn.workers.UvicornWorker:用于 FastAPI / Starlette 异步应用

5. 与 Nginx 结合

通常生产环境:

[客户端] <--HTTP--> [Nginx] <--unix socket/TCP--> [Gunicorn]
  • Nginx 做负载均衡和静态文件处理
  • Gunicorn 只处理 Python WSGI 应用

6. 高级优化

  • 调整 worker 数量:CPU 核心数 × 2 + 1 是经验值
  • 设置超时和 keep-alive:避免长连接占用 worker
  • 日志分离:方便排查问题
  • 使用 systemd 或 supervisor 管理 Gunicorn 服务

7.keep-alive http/tcp

画一个 TCP KeepAlive vs Gunicorn HTTP Keep-Alive 对比图,清楚展示两者作用的区别。

2025-09-01\_00-17-19.png


对比总结

特性 Gunicorn HTTP Keep-Alive TCP KeepAlive
层级 HTTP 层 TCP 层
默认值 2 秒 7200 秒 (Linux)
作用 复用 HTTP 连接处理多次请求 检测长时间空闲 TCP 连接存活
超时行为 超过 keep-alive 秒数关闭 HTTP 连接 超过探测次数或时间关闭 TCP 连接
控制对象 Gunicorn worker 内核 TCP socket