Flask 开发服务器执行两次:揭示原因
每当代码发生更改时,Flask 开发服务器都会处理应用程序的重新启动。此功能由 Werkzeug 库的 restart_with_reloader() 函数提供。
此函数生成一个子进程,使用 subprocess.call() 再次执行脚本。因此,原始脚本和子进程都会打印一次重新启动消息,从而导致观察到的重复打印行为。
禁用重新加载器
要消除此行为,通过将 use_reloader 设置为 False 来禁用重新加载器:
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0', use_reloader=False)
或者,您可以将 Flask run 命令与--no-reload 标志:
FLASK_DEBUG=1 flask run --no-reload
检测 Reloader 进程
使用 werkzeug.serving.is_running_from_reloader() 函数检测子进程:
from werkzeug.serving import is_running_from_reloader if is_running_from_reloader(): print(f"################### Restarting @ {datetime.utcnow()} ###################")
使用@app.before_first_request装饰器
如果需要设置模块全局变量,请考虑使用 @app.before_first_request 装饰器:
@app.before_first_request def before_first_request(): print(f"########### Restarted, first request @ {datetime.utcnow()} ############")
此装饰器在每次重新加载后执行一次函数,当第一个请求时是
注意:
在使用分叉或子进程来处理请求的完整 WSGI 服务器中,可以为每个子进程调用 before_first_request 处理程序。
以上是为什么我的 Flask 开发服务器似乎执行了两次?的详细内容。更多信息请关注PHP中文网其他相关文章!