本博客将介绍 flask 项目在 debug 模式下启动两次的原因以及对应解决方案

启动flask之后,会自动的重启(请注意第三行的 Restarting with stat

Now starting to run....
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
Now starting to run....
 * Debugger is active!
 * Debugger pin code: 634-150-323

当调用app.run()的时候,用到了Werkzeug库,它会生成一个子进程,当代码有变动的时候它会自动重启

如果在run()里加入参数 use_reloader=False,就会取消这个功能,当然,在以后的代码改动后也不会自动更新了。

可以查看WERKZEUG_RUN_MAIN环境变量, 默认情况下,调用子程序时,它会被设置为True。初次启动程序时为False。

在 debug 模式下,可以参考以下代码来规避重复执行

if os.environ.get('WERKZEUG_RUN_MAIN') != 'true':
    # do something only once, before the reloader

if os.environ.get('WERKZEUG_RUN_MAIN') == 'true':
    # do something each reload

更多详情请参见 stackoverflow