您的位置:首页 > 科技 > IT业 > 使用 Gunicorn 部署 Flask 项目

使用 Gunicorn 部署 Flask 项目

2024/12/23 12:16:10 来源:https://blog.csdn.net/weixin_54104864/article/details/141027973  浏览:    关键词:使用 Gunicorn 部署 Flask 项目

使用 Gunicorn 部署 Flask 项目

1. 简介

Flask 自带的 web 服务器仅适用于开发环境,无法满足生产环境的性能需求。在使用 app.run(host='0.0.0.0', port=5000) 启动时,Flask 会发出警告:WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.

WSGI 概念

  • WSGI:全称是 Web Server Gateway Interface(Web 服务器网关接口),是一种规范,用于定义 Web 服务器与 Web 应用程序之间的接口。
  • uWSGI:实现了 WSGI 和 uwsgi 协议的 Web 服务器。
  • Gunicorn:一个 Python WSGI HTTP 服务器,本博客将使用它来部署 Flask 应用。

2. 模块安装

使用 pip 安装 Gunicorn:

pip install gunicorn

3. 启动命令

3.1 命令行配置 Gunicorn 参数

main.py 为例,内容如下:

from flask import Flaskapp = Flask(__name__)@app.route('/', methods=['GET'])
def hello_world():return 'Hello Flask!'if __name__ == '__main__':app.run(host='0.0.0.0', port=5000)

运行命令:

gunicorn -w 5 -b 0.0.0.0:5000 main:app
参数含义
  • -w:工作进程数
  • -b:绑定的地址和端口
  • main:Flask 启动的 Python 文件名
  • app:脚本中创建的 Flask 对象名

注意事项

  1. Windows 系统不支持 Gunicorn,可能会报错 ModuleNotFoundError: No module named 'fcntl',建议在 Linux 下运行。
  2. 如果 Flask 启动后请求很慢,可能是 Gunicorn 和 Flask-SocketIO 版本不兼容,需对应版本。

3.2 文件配置 Gunicorn 参数

3.2.1 进程 + 线程模式

在根目录新建配置文件 config.py

# 是否开启debug模式
debug = True
# 访问地址
bind = "0.0.0.0:5000"
# 工作进程数
workers = 2
# 工作线程数
threads = 2
# 超时时间
timeout = 600
# 输出日志级别
loglevel = 'debug'
# 存放日志路径
pidfile = "log/gunicorn.pid"
# 存放日志路径
accesslog = "log/access.log"
# 存放日志路径
errorlog = "log/debug.log"
# gunicorn + apscheduler场景下,解决多worker运行定时任务重复执行的问题
preload_app = True

运行命令:

gunicorn -c config.py main:app
配置文件参数详解
  • -c CONFIG:配置文件路径
  • -b ADDRESS:绑定的 IP 和端口
  • -w INT:工作进程数量,默认为 1
  • --threads INT:每个 worker 的线程数,默认为 1
  • --worker-class STRTING:工作模式,默认为 sync
  • --timeout INT:超时时间,超过设定时间后工作将被杀掉
  • --daemon:是否以守护进程启动,默认 false
  • --access-logfile FILE:访问日志文件路径
  • --error-logfile FILE:错误日志文件路径

3.2.2 进程 + 协程模式

config.py 中使用 Greenlet:

from gevent import monkey
monkey.patch_all()# 是否开启debug模式
debug = True
# 访问地址
bind = "0.0.0.0:5000"
# 工作进程数
workers = 2
# 设置协程模式
worker_class="gevent"
# 最大客户端并发数量
worker_connections=500
# 超时时间
timeout = 600
# 输出日志级别
loglevel = 'debug'
# 存放日志路径
pidfile = "log/gunicorn.pid"
# 存放日志路径
accesslog = "log/access.log"
# 存放日志路径
errorlog = "log/debug.log"
# gunicorn + apscheduler场景下
preload_app = True
# 设置环境变量
raw_env = ['PATH=/user/local/ffmpeg/bin']

运行命令:

gunicorn -c config.py main:app

其他部署web开发工具:
在生产环境中,Flask 和 Django 常用的部署工具有:

  1. Gunicorn:适用于 Flask 和 Django 的 WSGI HTTP 服务器,支持多进程和多线程。

  2. uWSGI:另一个流行的 WSGI 服务器,性能优越,支持多种配置。

  3. Nginx:作为反向代理服务器,通常与 Gunicorn 或 uWSGI 配合使用,处理静态文件和负载均衡。

  4. Docker:容器化部署工具,可以简化应用的打包和分发。

  5. Supervisor:用于管理和监控进程,确保应用在崩溃后自动重启。

结论

通过以上步骤,您可以轻松使用 Gunicorn 部署 Flask 项目,并根据需要调整配置以满足生产环境的需求。使用 Gunicorn 提供的多进程和多线程支持,可以有效提升应用的并发处理能力,确保服务的稳定性和性能。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com