Flask配置热更新测试踩坑记录
最近在开发Flask应用时遇到了配置热更新的问题,特地做了个详细测试记录。
问题背景
在本地开发环境中,我需要频繁修改配置文件来测试不同环境下的应用行为。传统的做法是每次修改后都需要重启服务器,这严重影响了开发效率。
测试环境
- Flask版本: 2.0.1
- Python版本: 3.8.5
- 操作系统: Ubuntu 20.04
尝试方案一:使用Flask的config.from_object
# app.py
from flask import Flask
import os
app = Flask(__name__)
# 方案一:直接从对象加载配置
app.config.from_object('config.DevelopmentConfig')
if __name__ == '__main__':
app.run(debug=True)
尝试方案二:使用config.from_pyfile
# app.py
from flask import Flask
import os
app = Flask(__name__)
# 方案二:从文件加载配置
app.config.from_pyfile('config.py')
if __name__ == '__main__':
app.run(debug=True)
踩坑过程
经过多次测试发现,Flask本身并不支持配置的热更新。即使在代码中重新加载了配置文件,已创建的app实例仍然使用旧的配置。
实际解决方案
最终采用以下方式实现真正的热更新:
- 使用
os.system('kill -HUPcat flask.pid')来重启进程 - 或者在开发环境中使用
watchdog库监听文件变化
最终代码示例
from flask import Flask
import os
import time
app = Flask(__name__)
# 读取配置的函数
def load_config():
config_path = os.environ.get('FLASK_CONFIG', 'config.py')
app.config.from_pyfile(config_path)
print(f"配置已加载: {config_path}")
load_config()
@app.route('/')
def index():
return f"当前配置值: {app.config.get('TEST_VALUE')}"
if __name__ == '__main__':
# 重启时重新加载配置
app.run(debug=True)
结论
Flask的热更新需要通过外部工具或进程管理来实现,单纯依赖框架本身是无法做到的。建议在开发阶段使用python -m watchdog配合文件监听工具,或者使用Docker容器化部署时配置自动重启策略。

讨论