You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

systemd部署Gunicorn运行Flask应用,修改代码不生效如何解决

问题根本原因

gunicorn启动时会一次性将所有依赖的Python代码加载到进程内存中,运行过程中不会主动检测磁盘上的代码文件变更,所以修改代码后默认必须重启gunicorn进程才能加载新代码,这是Python WSGI服务的通用运行逻辑,和PHP、带watcher的Node.js部署模式有本质区别。

你当前的wsgi.py是标准写法,无需调整。

开发环境自动重载方案

本地调试阶段可以通过配置gunicorn的重载参数实现代码修改自动生效:

  1. 找到你的gunicorn.service systemd配置文件,在启动命令(ExecStart行)的末尾添加--reload参数,示例如下:
# 注意替换成你自己的虚拟环境路径、套接字路径等配置
ExecStart=/opt/your_project/venv/bin/gunicorn --workers 2 --bind unix:/opt/your_project/gunicorn.sock wsgi:application --reload
  1. 保存配置后依次执行以下命令生效:
    systemctl daemon-reload
    systemctl restart gunicorn

后续修改代码后gunicorn会自动检测到变更、重启worker进程,不需要你手动执行重启命令。

如果是纯本地开发,也可以直接运行Flask自带的调试服务器,默认就开启自动重载,还带断点调试功能,开发效率更高,注意这个调试服务器仅可用于本地开发,绝对不能用于生产环境。

生产环境注意事项

生产环境禁止开启--reload参数,该功能存在性能损耗和稳定性风险,生产环境修改代码后手动执行systemctl restart gunicorn是标准操作。如果需要不中断业务的重启,可以执行systemctl reload gunicorn,gunicorn会启动新的worker进程加载新代码处理请求,再逐步杀掉旧的worker进程,不会影响线上业务运行。

如果你的应用包含启动时仅执行一次的初始化逻辑,要注意保证这部分逻辑的幂等性,避免重启/重载时出现异常。

内容的提问来源于stack exchange,提问作者Karthikeyan Ganesan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 20:18:03