lijingxin
(Jingxin Lee)
1
大家好,问个问题。就是我把所有的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
新项目负责以下功能:
- 项目A由新项目B启动
- B项目新建一个
thread
或者process
来启动旧项目A
- B项目写一个路由,专门负责启动、关闭、重启项目A
这种方法十分简陋,只能说能用
frostming
(Frost Ming)
3
一个快速的但不健壮的方法:
import os, sys
@app.route(["POST"])
def reload():
os.execv(sys.argv[0], sys.argv)
这个方法虽然能重启进程,但问题很多,比如这个路由无法返回响应,windows不适用等等。
实际使用中还要考虑到app不是由python app.py
启动的,可能是由其他WSGI server调起的,具体还要测试。
lrs
(lrs)
4
如果是用flask run或直接运行程序来启动的话,可以写一个命令处理函数,和一个脚本,命令处理函数把这个程序exit掉,脚本运行这个命令,再运行flask程序,代码以后补充