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