首页 > 后端开发 > Python教程 > 为什么我的 Flask 开发服务器似乎执行了两次?

为什么我的 Flask 开发服务器似乎执行了两次?

DDD
发布: 2024-12-09 17:41:19
原创
486 人浏览过

Why Does My Flask Development Server Appear to Execute Twice?

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中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板