我正在使用 Flask 编写 Python Web 应用程序。我的应用程序在启动时与另一台服务器建立连接,并在后台定期与该服务器通信。
如果我不使用 Flask 的内置调试器(使用 debug=False 调用 app.run),没问题。
如果我确实使用内置调试器(使用 debug=True 调用 app.run),Flask 会使用相同的代码启动第二个 Python 进程。最终侦听 HTTP 连接并通常按照我的应用程序应有的行为是子进程,我认为当调试器启动时父进程只是在那里监视它。
但是,这对我在两个进程中运行的启动代码造成了严重破坏;我最终得到了与外部服务器的 2 个连接,2 个进程记录到同一个日志文件,通常,它们相互绊倒。
我认为在调用 app.run() 之前我不应该做真正的工作,但是我应该把这个初始化代码放在哪里(我只想每个 Flask 进程组运行一次,不管调试器模式如何,但需要在启动时运行并且独立于客户端请求)?
我发现这个关于“Flask auto-reload and long-running thread”的问题有些相关,但有些不同,答案对我没有帮助。(我也有一个单独的长时间运行的线程标记为守护线程,但是当重新加载器启动时它被杀死,但我要解决的问题是在任何重新加载需要发生之前。我不关心重新加载;我关心额外的进程,以及避免在父进程中执行不必要代码的正确方法。)