目 录CONTENT

文章目录

Gunicorn

解小风
2025-08-05 / 0 评论 / 1 点赞 / 4 阅读 / 3808 字

简介说明

Gunicorn(Green Unicorn)是一个用 Python 编写的 WSGI HTTP 服务器,专为 Unix 系统设计,广泛用于部署 Python Web 应用程序,特别是 Django、Flask、FastAPI 等框架。


主要特点

  • 高性能:采用预分叉工作模型,支持多进程并发处理请求

  • 易于配置:提供丰富的配置选项,支持配置文件和命令行参数

  • 多种工作模式:支持同步和异步工作模式(sync、async、gevent、eventlet 等)

  • 自动工作进程管理:自动重启崩溃的工作进程,确保服务稳定性

  • 优雅重启:支持零停机时间的配置更新和代码部署

  • 资源监控:内置工作进程资源监控,防止内存泄漏

  • 信号处理:支持标准 Unix 信号进行进程管理

  • 日志管理:灵活的日志配置,支持访问日志和错误日志

  • 负载均衡:内置负载均衡,可与 Nginx 等反向代理配合使用


适用场景

  • Django、Flask、FastAPI 等 Python Web 应用部署

  • 微服务架构中的 API 服务

  • 高并发 Web 应用服务

  • 需要稳定性和性能的生产环境

  • 容器化部署(Docker、Kubernetes)

  • 与 Nginx、Apache 等反向代理配合的后端服务


安装卸载

# 安装

# 示例:Python 项目中所使用的 conda 虚拟环境为 my_item_py310,将 Gunicorn 也装在相同的虚拟环境下
conda activate my_item_py310
pip install gunicorn

# 验证安装
gunicorn --version

# 查看帮助信息
gunicorn --help
# 卸载

# 示例:在 conda 虚拟环境中直接卸载
conda activate my_item_py310
pip uninstall gunicorn

# 验证卸载
gunicorn --version
# 应该提示命令未找到

启动服务

# 使用命令行参数启动
gunicorn App_Http_Server:app --workers 1 --worker-class uvicorn.workers.UvicornWorker --bind 0.0.0.0:12321 --timeout 300 --worker-connections 1000 --max-requests 1000 --max-requests-jitter 100 --preload
# 基础参数

# App_Http_Server:app : 需要启动的服务
#   - App_Http_Server: 待启动的 FastAPI 服务文件(不用带 .py 后缀)
#   - app: FastAPI 服务文件中的应用实例对象名称

# --bind 0.0.0.0:12321: 绑定地址和端口
#   - 0.0.0.0: 监听所有网络接口
#   - 12321: 服务端口号
# 工作进程参数

# --workers 1: 启动 1 个并发服务
#   - 一般设置为 2*CPU核心数+1
#   - 对于 GPU 型 AI 应用,由于 AI 模型会占用大量 GPU 显存
#   - k 个 worker 会导致 AI 模型加载 k 次,可能会超出显存限制
#   - 因此设置单个 worker,配合异步处理也足够处理并发请求

# --worker-class uvicorn.workers.UvicornWorker: 指定工作进程类型
#     sync: 同步工作进程(默认)
#     gevent: 基于 gevent 的异步工作进程
#     eventlet: 基于 eventlet 的异步工作进程
#     tornado: 基于 tornado 的异步工作进程
#     gthread: 基于线程的同步工作进程
#     uvicorn.workers.UvicornWorker: ASGI 异步工作进程

# --threads 10: 每个工作进程的线程数(仅适用于--worker-class gthread)

# --worker-connections 1000: 单 worker 最大并发连接数
#   - 默认 1000,适用于异步工作进程
# 性能和资源参数

# --timeout 300: 超时限制
#   - 默认 30 秒,这里改为 300 秒,因为 TTS 生成、AI 推理等可能需要较长时间

# --max-requests 1000: 单 worker 处理请求数上限
#   - 达到这个数量后,worker 会重启(防止内存泄漏)
#   - 默认无限制,建议设置以防止内存泄漏

# --max-requests-jitter 100: 重启抖动范围
#   - 在 900-1100 之间随机重启,避免所有 worker 同时重启

# --preload: 预加载应用
#   - 在 fork worker 之前加载应用代码,可以节省内存
#   - 但可能影响热重载功能

1
  1. 支付宝打赏

    qrcode alipay
  2. 微信打赏

    qrcode weixin

评论区