Gunicorn
定义
Gunicorn (Green Unicorn) 是一个用于 Python 的 WSGI HTTP 服务器,广泛用于生产环境部署 Django、Flask 等 Web 应用。
核心特性
- 预派生(pre-fork)模型:主进程管理多个工作进程
- 多种工作模式:同步、异步、基于事件的多种工作类
- 自动工作进程管理:按需重启工作进程
- 信号处理:支持平滑重启和优雅关闭
工作原理
Master Process
├── Worker 1
├── Worker 2
├── Worker 3
└── Worker 4
- 主进程(Master):管理工作进程,不处理请求
- 工作进程(Worker):实际处理 HTTP 请求
配置示例
# gunicorn.conf.py
bind = "0.0.0.0:8000"
workers = 3 # (2 x CPU核心数) + 1
worker_class = "sync"
max_requests = 1000
max_requests_jitter = 50
timeout = 30
keepalive = 2
# 日志
accesslog = "-" # stdout
errorlog = "-" # stderr
loglevel = "info"
# 进程名称
proc_name = "myapp"
# 用户/组(生产环境)
user = "django"
group = "django"
常用命令
# 基本启动
gunicorn myproject.wsgi:application
# 指定配置
gunicorn -c gunicorn.conf.py myproject.wsgi:application
# 热重载(开发环境)
gunicorn --reload myproject.wsgi:application
# 指定绑定地址
gunicorn -b 0.0.0.0:8000 myproject.wsgi:application
工作模式
| 工作类 | 适用场景 | 特点 |
|---|---|---|
| sync | CPU 密集型 | 简单稳定,默认 |
| gevent | I/O 密集型 | 协程,高并发 |
| eventlet | I/O 密集型 | 协程,高并发 |
| tornado | Tornado 应用 | 异步非阻塞 |
| gthread | 线程池 | 每个 worker 多线程 |
与 Nginx 配合使用
upstream django_app {
server 127.0.0.1:8000;
}
server {
listen 80;
location / {
proxy_pass http://django_app;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
}
location /static/ {
alias /path/to/static/;
}
}
生产环境最佳实践
- 工作进程数:(2 x CPU核心数) + 1
- 最大请求数:防止内存泄漏,定期重启 worker
- 超时设置:防止长时间运行的请求占用资源
- 日志记录:启用访问日志和错误日志
- 非 root 用户:以普通用户权限运行
- 配合反向代理:Nginx 处理静态文件和负载均衡
相关技术
- WSGI - Web 服务器网关接口
- Django - Web 框架
- Docker - 容器化部署
- Nginx - 反向代理服务器
录入自: Django开发实践笔记