阻止Flask初始化阻止

时间:2016-01-24 21:45:44

标签: python flask multiprocessing

我正在为基于插件的应用程序添加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通信?

2 个答案:

答案 0 :(得分:2)

应用程序不是“挂起”,app.run的意图是启动一个持续的服务器进程,该进程一直运行直到明确关闭。您应该在启动服务器之前运行所有设置逻辑。

如果您需要在初始化应用服务器进程后运行任务,则可以使用Celery之类的其他进程在其他进程中调度它们。

答案 1 :(得分:1)

另请注意,您可以在具有某些限制的单独线程中启动Flask。请参阅this answer