gpt4 book ai didi

python - 从 Flask View 中推送 celery 任务分离 SQLAlchemy 实例(DetachedInstanceError)

转载 作者:行者123 更新时间:2023-11-30 23:11:04 24 4
gpt4 key购买 nike

我将 SQLAlchemy 模型(源自 sqlalchemy.ext.declarative.declarative_base)与 Flask-SQLAlchemy 一起使用

当我尝试运行任何 celery 任务时(只是空的)

@celery.task()
def empty_task():
pass

在通用 flask View 中

@blueprint.route(...)
def view():
image = Image(...)
db.session.add(image)
db.session.flush()

#this cause later error
empty_task()

#now accessing attributes ends with DetachedInstanceError
return jsonify({'name': image.name, ...}

我明白了

DetachedInstanceError: Instance <Image at 0x7f6d67e37b50> is not bound to a Session; attribute refresh operation cannot proceed

当我在任务推送后尝试访问模型时。没有任务就可以正常工作。如何解决?

更新:celery 使用此任务库:

TaskBase = celery.Task
class ContextTask(TaskBase):
abstract = True

def __call__(self, *args, **kwargs):
with app.app_context():
try:
return TaskBase.__call__(self, *args, **kwargs)
except Exception:
sentry.captureException()
raise

celery.Task = ContextTask

最佳答案

啊我在运行任务时犯了错误。它应该是empty_task.apply_async()

直接调用它会创建新的应用程序上下文,新 session 会导致旧 session 关闭。

关于python - 从 Flask View 中推送 celery 任务分离 SQLAlchemy 实例(DetachedInstanceError),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30347090/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com