阻止 Flask 初始化阻塞

Mik*_*.K. 5 python multiprocessing flask

我正在向基于插件的应用程序添加 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()
Run Code Online (Sandbox Code Playgroud)

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

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

jum*_*pap 1

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

如果您需要在应用程序服务器进程初始化后运行任务,您可以使用Celery之类的工具将它们分派到另一个进程中。