【问题标题】:Flask app "Restarting with stat"Flask 应用程序“使用 stat 重新启动”
【发布时间】:2015-03-30 06:55:52
【问题描述】:

我已经构建了一些 Flask 应用程序,但在我的最新项目中,我注意到开发模式下有些奇怪。终端中通常消息的第二行始终显示:

 * Running on http://127.0.0.1:5000/
 * Restarting with reloader

已被替换为:

 * Restarting with stat

我认为我没有做任何不同的事情,事实上,我首先克隆了一个我用过很多次的入门工具包项目,它本身并没有显示这种行为。我还注意到这个项目稳定地消耗了大约 15% 的 CPU,而我的另一个项目几乎没有。

任何想法为什么会发生这种情况?

【问题讨论】:

  • 我可以确认 a) 行为变化似乎是 Werkzeug 版本变化的结果。 b)增加的资源使用似乎与重新加载器相关 - 设置 debug = False 会改变行为。 c) 安装看门狗降低了系统资源需求。我还要注意,在开发模式下运行应用程序现在会导致两个 python 解释器运行,而以前只运行一个。 (有或没有看门狗)另外:安装了看门狗,消息将是:Restarting with fsevents reloader
  • 感谢您提出这个问题。就我而言,在我安装了看门狗之前,重新加载 根本不起作用
  • 我也注意到了这一点。当 debug=True 时它不打印“在 http://...上运行”消息是一个错误吗?我猜他们认为如果你在调试,那么你就知道本地主机业务......
  • 您是否在代码中使用了.run()?我遇到了这个问题,但改为通过终端使用导出FLASK_APP=app.py。对我来说不再是问题。在文档中引用此处flask.pocoo.org/docs/0.11/quickstart/#a-minimal-application
  • 实际上,我认为在提出这个问题时 cli 甚至都不可用。

标签: python flask


【解决方案1】:

检查您的 Werkzeug 版本。 0.10 版刚刚发布,重新加载器进行了许多更改。一个变化是使用了默认的轮询重新加载器;旧的 pyinotify reloader 显然不准确。如果您想要更有效的轮询,请安装 watchdog 包。可以看到这个here相关的代码。

当 Werkzeug 找不到看门狗时,它使用stat 重新加载器,否则它使用任何重新加载器看门狗使用,这可能因平台而异。此消息只是为了让您知道哪个正在使用。


看门狗可能与 gevent 不兼容。如果您正在使用 gevent 并且在使用 Watchdog 时遇到重新加载器问题,请查看this GitHub issue

【讨论】:

    【解决方案2】:

    使用run(use_reloader=False) 禁用重新加载器。

    它给了我一些问题,当它重新启动时它无法找到我的服务器文件。这成功了。它只执行了一次,一切正常。很奇怪。

    【讨论】:

    • 在 OP 中,我希望重新加载器正在运行 - 我只是不希望它占用我的 CPU。
    【解决方案3】:

    如果您使用app.run(debug=True) 运行,它将作为调试模式的一部分运行重新加载器。如果您不想使用调试模式,请传递debug=False 或根本不传递。

    【讨论】:

      【解决方案4】:

      我的文件名是 __main__.py,我将其导出为:export FLASK_APP=__main__.py 将名称更改为 app.py 并重新导出后,它就起作用了。

      【讨论】:

        猜你喜欢
        • 2018-08-12
        • 1970-01-01
        • 1970-01-01
        • 2021-03-01
        • 1970-01-01
        • 2011-01-05
        • 2012-06-10
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多