【发布时间】:2018-03-27 21:48:16
【问题描述】:
假设您有一些包含唯一字段的模型,并且您有一个将模型的新实例保存到数据库的异步任务。像这样:
@shared_task
def create_model(model_identifier):
with transaction.atomic():
serializer=MyModelSerializer(data=model_data)
serializer.is_valid()
serializer.save()
.
.
.
some more actions
然后您一个接一个地创建了 2 个具有相同标识符的任务。 第一个将首先保存新实例,因此当第二个到达“save()”部分时 - 对象已经存在但尚未提交。 在这种情况下应该怎么办? 如果我做对了,看起来当第二个到达“save()”时(在 is_valid() 通过之后),它等待第一个完成事务(尽管它们基本上是并行运行的)并且只有然后引发了一个 integrityError 异常。
听起来对吗?
【问题讨论】:
标签: django transactions celery