Flask 和看门狗:多线程启动

Flask and watchdog: multiple threads starting

我正在使用 Flask 编写一个应用程序,它监视文件系统的更新并记录它们。我的启动顺序(在调试模式下)是:

  1. 创建 Flask 应用程序对象
  2. 启动看门狗
  3. 启动应用程序

当运行处于调试模式时,应用程序会使用werkzeug的fsevents reloader自动重启,这是正常的;但是,此重启不会终止第一个看门狗线程,因此此时有第二个看门狗线程,导致每个文件系统事件都被复制。

这不会在生产中发生,但它会影响我的调试,让我担心我在启动看门狗时做错了什么。我应该做些什么才能让看门狗干净地退出,或者有什么方法可以防止它再次启动?

此外,当应用程序因代码编辑而重启时,第二个看门狗线程确实重启;它只是在初始重新加载之前启动的第一个看门狗不会在重新加载时关闭。

与在应用程序启动之前启动后台线程相比,使用 app.before_first_request 启动线程更干净、更安全。这样做的缺点是后台线程不会启动,直到第一个请求进来。