gunicorn 指南
什么是 gunicorn?
gunicorn(green unicorn)是一个兼容 wsgi 协议的 python web 服务器,广泛用于部署如 flask、django 等 python web 框架。
其核心功能包括:
- 启动 web 服务
- 管理多个工作进程
- 解决 python 原生并发性能不足问题
- 常与 nginx 组合部署,形成 nginx + gunicorn 的架构
安装 gunicorn
pip install gunicorn gunicorn -h # 查看帮助
使用 gunicorn 启动 flask 应用
1. 创建一个最基本的 flask 应用
# app.py from flask import flask def create_app(): app = flask(__name__) return app app = create_app() @app.route('/') def index(): return 'hello world!' if __name__ == '__main__': app.run()
2. 使用 gunicorn 启动服务
在项目根目录下运行:
gunicorn -w 4 -b 0.0.0.0:8000 app:app
说明:
- 第一个
app
是文件名app.py
- 第二个
app
是 flask 实例名app
gunicorn 常用参数详解
参数 | 说明 |
---|---|
-c config | 使用配置文件(适合生产环境) |
-b address | 绑定的地址与端口,例如 0.0.0.0:8000 |
-w, --workers | 工作进程数,正整数,默认 1 |
-k, --worker-class | 工作模式,如 sync(默认)、gevent、eventlet |
--threads | 每个 worker 的线程数,默认 1 |
--worker-connections | 最大客户端并发数,默认 1000 |
--backlog | 待处理连接队列最大长度,默认 2048 |
-p, --pid | 设置 pid 文件路径 |
--access-logfile | 访问日志路径 |
--access-logformat | 日志格式 |
--error-logfile / --log-file | 错误日志路径 |
--log-level | 日志等级,默认 info,可设为 debug/warning/error |
--limit-request-line | 请求行最大长度(默认 4094) |
--limit-request-fields | 请求头最大字段数(默认 100) |
--limit-request-field-size | 请求头字段最大字节数(默认 8190) |
-t, --timeout | 请求超时时间,单位秒,默认 30 秒 |
--daemon | 是否以守护进程运行,默认 false |
--chdir | 切换工作目录 |
--graceful-timeout | 优雅退出时间,默认 30 秒 |
--keep-alive | keep-alive 连接等待时间,默认 2 秒 |
--reload | 开发模式:代码变更时自动重载 |
--spew | 打印服务器执行的所有语句 |
--check-config | 显示当前配置 |
-e, --env | 设置环境变量 |
使用配置文件启动 gunicorn
- 示例配置文件:gunicorn.conf.py
# 并行工作进程数 workers = 4 # 每个工作进程线程数 threads = 2 # 监听内网端口 bind = '127.0.0.1:5000' # 是否以守护进程运行 daemon = 'false' # 工作模式 worker_class = 'gevent' # 最大并发连接数 worker_connections = 2000 # pid 文件路径 pidfile = '/var/run/gunicorn.pid' # 日志路径 accesslog = '/var/log/gunicorn_access.log' errorlog = '/var/log/gunicorn_error.log' # 日志级别 loglevel = 'warning'
- 启动命令
gunicorn -c gunicorn.conf.py app:app
注意事项
gunicorn 不支持 windows 平台
- 在 windows 下运行可能出现以下错误:
importerror: no module named _curses / fcntl
解决方法:
- 尝试自行下载缺失模块(如
fcntl.py
) - 推荐在 linux、wsl 或 docker 环境中部署
推荐部署组合
生产环境中推荐以下组合:
nginx + gunicorn + flask/django
nginx
:作为前端反向代理和静态资源服务gunicorn
:处理 python 后端应用supervisor
:管理 gunicorn 的守护进程运行
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持代码网。