我使用Django 1.7.3作为我的框架,使用Tastypie 0.11.1作为rest api库。 我有一个带有名称字段的基本模型和一个用于创建此模型的API。
我的问题在于尝试创建模型时的关键部分(竞争条件)。
我已尝试使用transaction.atomic并在数据库级别设置ATOMIC_REQUESTS = True但是当我作为竞赛发送两个请求时,我收到两个相同的行。
有没有办法确保Tastypie保存功能是原子的?或以任何方式确保请求是原子的?
答案 0 :(得分:0)
我需要看看:
如果您正在使用greenthread,多个工作人员和/或多个服务器,那么2个请求实际上可能无序处理。
我强烈建议您更改代码,以便不对远程资源执行并发操作;等到一个请求完成后再开始下一个请求。
答案 1 :(得分:0)
我在这种情况下所做的工作,尤其是涉及save_m2m
的情况,取代了我基于dispatch
的课程的ModelResource
方法:
from django.db import transaction
def dispatch(self, request_type, request, **kwargs):
with transaction.atomic():
return super(UsersResource, self).dispatch(request_type, request, **kwargs)
Django调用 dispatch
来处理完整的循环,因此一切都成功或者事务被回滚。