我试着在我现有的烧瓶项目中加入芹菜。添加之后,我在运行时遇到了一个“在应用程序上下文之外工作”的错误。看来芹菜工人缺少我的应用程序上下文。但我不知道在这个例子中,该把应用程序上下文传递给芹菜工人。在
以下是我当前的结构(我尝试使用蓝图和api文档遵循工厂模式):
-run.py
-app
-module1
-controller.py
-model.py
-service.py
-__init__.py
-config.py
为了初始py在
^{pr2}$为了运行.py在
from app import create_app
app = create_app()
if __name__ == '__main__':
app.run(threaded=True, debug=True)
为了服务.py在
from app import db, celery
@celery.task(bind=True)
def service1(self):
# do somethigng & return
为了控制器.py在
from flask import Blueprint
from flask_restplus import Api, Resouce
blueprint = Blueprint('service', __name__)
apis = Api(app = blueprint)
ns = apis.namespace('service', 'service description')
@ns.route("/")
class SomeList(Resource):
def get(self):
service1.apply_async()
# return
我认为这种混淆是基于这样一个事实:您试图将应用程序上下文“传递”给芹菜工人。实际上,烧瓶过程不能将上下文传递给工人,因为它们是不同的进程。Celery工作进程需要通过调用
create_app()
创建自己的Flask应用程序实例,以便在需要时推送自己的应用程序上下文。在例如,在您的
service1
任务中:为了提高效率,您可以创建一个由所有任务共享的全局
^{pr2}$app
:相关问题 更多 >
编程相关推荐