阻止 Flask 初始化阻塞

Stopping Flask initialization from blocking

我正在为基于插件的应用程序添加 Flask 支持。在启动时,该应用程序实例化了许多插件 classes。我认为这就像在初始化 class 时让 Flask 启动一样简单,但相反,当它遇到 Flask 启动方法时整个应用程序挂起。

考虑以下示例:

#!/usr/bin/env python

from flask import Flask

class TestClass:
    def __init__(self):
        print('Initializing an instance of TestClass')
        self.app = Flask(__name__)
        self.app.run()
        print("Won't get here until Flask terminates!")


foo = TestClass()

在 Flask 终止之前不会评估第二行打印。

有没有一种明智的方法可以强制 app.run 进入后台,以便 class 继续其初始化步骤,同时仍然能够在我的其余部分与 Flask 通信 class?

该应用程序不是 "hanging",app.run 的目的是启动一个 运行 直到明确关闭的持久服务器进程。在启动服务器之前,您应该 运行 所有设置逻辑。

如果您需要在应用程序服务器进程初始化后 运行 任务,您可以使用 Celery.

之类的东西在另一个进程中分派它们

另请注意,您可以在一个单独的线程中启动 Flask,但有一些限制。参见