gpt4 book ai didi

Django celery 任务 : Newly created model DoesNotExist

转载 作者:行者123 更新时间:2023-12-03 23:53:30 26 4
gpt4 key购买 nike

为什么我创建的模型实例在之后直接从 celery 任务查询时没有找到?例如:

# app.views

model = Model.objects.create() # I create my lovely model in a view
from app.tasks import ModelTask # I import my Async celery task
ModelTask.delay(model.pk) # I start the task

一切看起来都很好,当然如果我在 create() 之后的任何时候查询调用模型应该存在于数据库中。

更新 1 :我使用默认 transaction.autocommit在我看来,Django 提供的行为。

但是下面的任务抛出了 ObjectDoesNotExist异常(exception):
# app.tasks

class ModelTask(Task):
def run(self, model_pk):
from app.models import Model
Model.objects.get(pk=model_pk)

在我的测试中,正如预期的那样, model_pk是一个正确的正整数 ID。

结论

我假设这里出现了一些异步/“单独的进程”问题,但我不知道它是什么。如果感觉好像我犯了一些明显的错误。

我不认为数据库事务是答案,因为 Django 的默认“自动提交”方法确保在 create() 后立即执行数据库操作。方法被调用。

最佳答案

这些答案需要更新。 Django 现在有 transaction.on_commit()这是为这个确切的问题而构建的,他们甚至提供了一个任务示例:

transaction.on_commit(lambda: some_celery_task.delay('arg1'))

https://docs.djangoproject.com/en/2.1/topics/db/transactions/#django.db.transaction.on_commit

关于Django celery 任务 : Newly created model DoesNotExist,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15790380/

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