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

如何在无代码或文件变更时手动触发Flask应用重载

Flask debug模式下无文件修改手动触发重载方案

注意:该方案仅适用于debug=True且开启Werkzeug默认重加载器的开发环境,生产环境禁止使用,未加鉴权的公开重载接口存在极高安全风险。

Flask debug模式的自动重载能力由底层Werkzeug框架的重加载器实现,不需要修改任何项目代码、资源文件伪造文件变更事件,直接调用重加载器内置的重启方法即可实现手动触发,完全适配给出的/reloadFlask路由框架。

完整实现代码如下:

import time
import threading
import werkzeug._reloader
from flask import jsonify

@app.route('/reloadFlask', methods = ['POST'])
def reloadFlask():
    # 非debug环境直接拦截调用
    if not app.debug:
        return jsonify({"code": 500, "msg": "仅debug开发环境支持手动重载功能"}), 500
    
    def trigger_reload_task():
        # 延迟100ms执行重载,保证接口响应能正常返回给请求方
        time.sleep(0.1)
        # 调用Werkzeug内置重载逻辑,和文件变更触发的重载流程完全一致
        werkzeug._reloader.restart_with_reloader()
    
    # 启动独立守护线程执行重载,不阻塞当前请求响应
    threading.Thread(target=trigger_reload_task, daemon=True).start()
    return jsonify({"code": 200, "msg": "触发成功,服务将在100ms后完成重载"})

注意事项

  • 整个触发逻辑全程不会写入、修改任何项目下的代码文件、静态资源文件,完全通过内存调用重加载器接口实现
  • 最终重载效果和代码/文件变更触发的自动重载完全一致,所有路由、配置、加载的模块资源都会重新初始化
  • 如果你手动配置了app.run(use_reloader=False)关闭了重加载器,该方法无法生效;debug=True默认会开启重加载器,无需额外配置
  • 如果使用2.0以下版本的Werkzeug出现导入报错,将import werkzeug._reloader替换为from werkzeug import _reloader即可,调用逻辑不变
  • 建议给该接口增加简单的鉴权校验,避免本地开发时被未知请求随意触发服务重启

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 07:18:23