我正在使用 Flask 开发网站,在开发过程中,我使用以下文件运行flask:
#!/usr/bin/env python
from datetime import datetime
from app import app
import config
if __name__ == '__main__':
print('################### Restarting @', datetime.utcnow(), '###################')
app.run(port=4004, debug=config.DEBUG, host='0.0.0.0')
当我启动服务器时,或者当它因文件已更新而自动重新启动时,它总是显示打印行两次:
################### Restarting @ 2014-08-26 10:51:49.167062 ###################
################### Restarting @ 2014-08-26 10:51:49.607096 ###################
虽然这并不是真正的问题(其余部分按预期工作),但我只是想知道为什么它会这样?有任何想法吗?
Flask 开发服务器默认情况下以重新加载模式运行两次的原因是为了提高在开发过程中监控代码更改的可靠性。让我们来分析一下:
-
第一次执行: 当运行 Flask 应用程序时,开发服务器会启动并创建一个子进程(或工作进程)。此初始进程负责监视文件系统中是否有任何更改。
-
第二次执行: 创建子进程后,它也会执行的脚本,导致第二次打印“正在重新启动...”消息。此子进程是实际处理传入请求的进程。
-
文件更改检测: 主进程(第一次执行)持续监视文件系统中的更改。当它检测到的代码有更新时,它会自动重新启动子进程(第二次执行)以加载并使用最新版本。
-
无缝重新加载: 重新启动子进程允许 Flask 开发服务器在重新加载修改后的代码时不中断正在进行的请求。主进程继续监听请求,并将它们路由到新的子进程。
简而言之,Flask 开发服务器的双重执行行为旨在在开发环境中提供高效且自动化的代码重新加载机制。如果不希望看到两次“正在重新启动...”消息,可以在
app.run()
函数中将
use_reloader=False
参数设置为禁用重新加载功能。
但是,请记住,禁用重新加载功能需要在每次进行代码更改后手动重新启动服务器,才能使更改生效。
标签:python,flask From: 25504149