阻止 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
,但有一些限制。参见 。
我正在为基于插件的应用程序添加 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
,但有一些限制。参见