我正在为基于插件的应用程序添加Flask支持。在启动时,应用程序实例化了许多插件类。我认为这就像在初始化类时启动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
进入后台,以便课程继续其初始化步骤,同时仍然能够在课程的其余部分与Flask通信?
答案 0 :(得分:2)
应用程序不是“挂起”,app.run
的意图是启动一个持续的服务器进程,该进程一直运行直到明确关闭。您应该在启动服务器之前运行所有设置逻辑。
如果您需要在初始化应用服务器进程后运行任务,则可以使用Celery之类的其他进程在其他进程中调度它们。
答案 1 :(得分:1)
另请注意,您可以在具有某些限制的单独线程中启动Flask
。请参阅this answer。