我已经构建了一些Flask应用程序,但在我的最新项目中,我注意到在开发模式下有点奇怪。终端中常用消息的第二行始终显示:
* Running on http://127.0.0.1:5000/
* Restarting with reloader
已被替换为:
* Restarting with stat
我认为我没有做过任何不同的事情,事实上,我开始克隆一个我多次使用的入门套件项目,它本身并没有显示出这种行为。我还注意到这个项目稳定地消耗了大约15%的CPU,而我的另一个项目几乎没有什么了不起。
为什么会发生这种情况?
答案 0 :(得分:43)
检查您的Werkzeug版本。版本0.10刚刚发布,并且重新加载了许多更改。一个变化是使用默认轮询重新加载器;旧的pyinotify重新加载器显然是不准确的。如果您想要更有效的轮询,请安装watchdog
包。您可以看到与此here相关的代码。
当Werkzeug无法找到看门狗时,它会使用stat
重新加载器,否则它会使用看门狗使用的任何重新加载器,这可能因平台而异。此消息只是让您知道正在使用哪一个。
看门狗可能与gevent不兼容。如果您在使用看门狗时使用gevent并在重新加载器方面遇到问题,请检查this GitHub issue。
答案 1 :(得分:16)
使用run(use_reloader=False)
禁用重新加载器。
它给了我一些问题,当它重新启动时无法找到我的服务器文件。这样做了。它只执行一次,一切正常。很奇怪。
答案 2 :(得分:3)
如果使用app.run(debug=True)
运行,它将在调试模式下运行重新加载器。如果您不想使用调试模式,请通过debug=False
或完全不通过。
答案 3 :(得分:-2)
我的文件名是__main__.py,我将其导出为:export FLASK_APP = __ main__.py 将名称更改为app.py并重新导出后,它就起作用了。