假设您有一些包含唯一字段的模型,并且您有一个异步任务,可以将新模型实例保存到DB。像这样的东西:
@shared_task
def create_model(model_identifier):
with transaction.atomic():
serializer=MyModelSerializer(data=model_data)
serializer.is_valid()
serializer.save()
.
.
.
some more actions
然后使用相同的标识符依次创建其中2个任务。 第一个将首先保存新实例,因此当第二个实例到达“保存()”时part - 该对象已经存在但尚未提交。 在那种情况下会发生什么? 如果我做对了,看起来当第二个到达“保存()' (在is_valid()传递之后),它等待第一个完成事务(尽管它们基本上并行运行),然后才引发integrityError异常。
听起来不错吗?
答案 0 :(得分:0)
尝试使用@ app.task而不是@shared_task
解释@ app.task的文件 http://docs.celeryproject.org/en/latest/getting-started/first-steps-with-celery.html#application
使用apply_async在队列中添加任务。