我有一个Flask应用程序,这是一个非常基本的应用程序,具有POST处理程序和一些数据库插入 . 使用Celery将DB插入设置为任务 . 如果我将我的Celery实例创建和任务定义放在 tasks.py
文件中,并从我的 main.py
文件(也有Flask应用程序创建)调用函数,我得到 out of context error
. tasks.py
文件中的任务又调用执行数据库插入的DB类 . 如何正确创建Celery实例并确保它具有Flask上下文?
这就是结构大致类似于:
-
main.py = Flask应用创建,路由处理和tasks.delay调用 .
-
tasks.py = Celery实例创建和任务定义 .
-
DB =插入 .
我希望一切都在同一个环境中运作 .
1 回答
Flask docs suggest继承Celery的Task类并在Flask应用程序上下文中包装任务执行 . 所以在_1716396中如果您的Flask应用程序实例名为
app
且您的Celery实例名为celery
,您将使用新的子类替换celery
的Task属性: