Python 将芹菜与烧瓶一起使用,可得到;弹出错误的应用程序上下文。”;断言错误

Python 将芹菜与烧瓶一起使用,可得到;弹出错误的应用程序上下文。”;断言错误,python,python-2.7,flask,celery,Python,Python 2.7,Flask,Celery,我或多或少在使用设置,使用您的flask应用程序上下文从以下位置运行芹菜任务: 我收到的错误消息与 但是,我在实际的工人那里得到了它,芹菜任务正在执行。以下是跟踪: worker_1 | Traceback (most recent call last): worker_1 | File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task worker_1 | R

我或多或少在使用设置,使用您的flask应用程序上下文从以下位置运行芹菜任务:

我收到的错误消息与

但是,我在实际的工人那里得到了它,芹菜任务正在执行。以下是跟踪:

worker_1 | Traceback (most recent call last):
worker_1 |   File "/usr/local/lib/python2.7/dist-packages/celery/app/trace.py", line 240, in trace_task
worker_1 |     R = retval = fun(*args, **kwargs)
worker_1 |   File "/code/app/__init__.py", line 42, in __call__
worker_1 |     return TaskBase.__call__(self, *args, **kwargs)
worker_1 |   File "/usr/local/lib/python2.7/dist-packages/flask/ctx.py", line 186, in __exit__
worker_1 |     self.pop(exc_value)
worker_1 |   File "/usr/local/lib/python2.7/dist-packages/flask/ctx.py", line 178, in pop
worker_1 |     % (rv, self)
worker_1 | AssertionError: Popped wrong app context.  (<flask.ctx.AppContext object at 0x47a5790> instead of <flask.ctx.AppContext object at 0x427e390>)
worker_1|回溯(最近一次呼叫最后一次):
trace_任务中的worker_1|File“/usr/local/lib/python2.7/dist packages/芹菜/app/trace.py”,第240行
工人1 | R=retval=fun(*args,**kwargs)
worker|1 | File“/code/app/_init__.py”,调用中第42行__
worker_1|返回任务库。__调用(self,*args,**kwargs)
worker|1|File“/usr/local/lib/python2.7/dist packages/flask/ctx.py”,第186行,在|u出口处__
worker|1|self.pop(exc|U值)
worker|1|File“/usr/local/lib/python2.7/dist packages/flask/ctx.py”,第178行,pop格式
工人| 1 |%(rv,自身)
worker|1| AssertionError:弹出了错误的应用程序上下文。(代替)
有人有什么想法吗?在应用程序上下文中运行应该是解决此问题,而不是创建它


谢谢

我知道你发帖子已经4年了,但我也遇到了类似的问题,除了使用
rq
而不是
芹菜

网络上的每个人都告诉你,你需要为你的应用程序添加上下文,例如:

他们没有告诉你的是,如果这个文件中有任何其他内容会导致应用程序的主实例打开它(例如另一个函数),那么你会点击上面的两行并得到错误

我的解决方案是将这两行代码放在实际的异步函数中,我将其卸载给一个工作人员,如下所示:

def run_async_backup(machine_id):
    app = create_app()
    app.app_context().push()
    # your code for the worker...
这意味着主实例不会命中它们,而工作者会命中它们(假设只有工作者调用此函数)。

可能会有所帮助。
def run_async_backup(machine_id):
    app = create_app()
    app.app_context().push()
    # your code for the worker...