flask重新加载app.py

大家好,问个问题。就是我把所有的route都写在了app.py里,但是我的一些文件(不是代码)更新了,我要重新加载一下app.py才能使用更新的文件,否则还是会使用旧的文件, 请问应该怎么做?

我现在的做法是在app.py的路由reload下面,调用bash命令, 把 app.py的进程给kill 然后用bash在开一个python app.py,但是在kill掉之前的app.py的进程之后,就无法执行后面那一步的bash了,也就是无法执行新的app.py,请问应该怎么办?

把reload这个route写到另一个py文件? 谢谢

没记错,flask原生是不支持这种操作的。
丑陋的解决方法:
你可以再写一个新项目,提前声明:现有的app.py(旧项目) -> A ; 新项目 -> B
新项目负责以下功能:

  1. 项目A由新项目B启动
  2. B项目新建一个thread或者process来启动旧项目A
  3. B项目写一个路由,专门负责启动、关闭、重启项目A

这种方法十分简陋,只能说能用 :poop:

一个快速的但不健壮的方法:

import os, sys

@app.route(["POST"])
def reload():
    os.execv(sys.argv[0], sys.argv)

这个方法虽然能重启进程,但问题很多,比如这个路由无法返回响应,windows不适用等等。
实际使用中还要考虑到app不是由python app.py启动的,可能是由其他WSGI server调起的,具体还要测试。

如果是用flask run或直接运行程序来启动的话,可以写一个命令处理函数,和一个脚本,命令处理函数把这个程序exit掉,脚本运行这个命令,再运行flask程序,代码以后补充