Django Tastypie原子操作

时间:2016-01-19 13:06:15

标签: python django tastypie

我使用Django 1.7.3作为我的框架,使用Tastypie 0.11.1作为rest api库。 我有一个带有名称字段的基本模型和一个用于创建此模型的API。

我的问题在于尝试创建模型时的关键部分(竞争条件)。

我已尝试使用transaction.atomic并在数据库级别设置ATOMIC_REQUESTS = True但是当我作为竞赛发送两个请求时,我收到两个相同的行。

有没有办法确保Tastypie保存功能是原子的?或以任何方式确保请求是原子的?

2 个答案:

答案 0 :(得分:0)

我需要看看:

  1. 进行API调用的代码。
  2. 您对资源所做的任何更改。
  3. 这部署了什么样的堆栈。
  4. 如果您正在使用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来处理完整的循环,因此一切都成功或者事务被回滚。