首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Django Tastypie原子操作

Django Tastypie原子操作
EN

Stack Overflow用户
提问于 2016-01-19 21:06:15
回答 2查看 263关注 0票数 1

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

我的问题是在尝试创建模型时的临界区(竞争条件)。

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

有没有办法确保Tastypie save函数是原子的?或者有什么方法可以确保请求是原子的?

EN

回答 2

Stack Overflow用户

发布于 2016-01-20 06:25:31

我需要看看:

  1. 进行API调用的代码。
  2. 对部署此应用程序的resources.
  3. What类型的堆栈所做的任何更改。

如果您碰巧使用了greenthread、多个worker和/或多个服务器,那么这两个请求实际上可能被无序处理。

我强烈建议更改您的代码,使其不在远程资源上执行并发操作;请等到一个请求完成后再启动下一个请求。

票数 0
EN

Stack Overflow用户

发布于 2018-01-30 18:27:35

在这种情况下,特别是在涉及save_m2m的情况下,我所做的就是覆盖我的ModelResource-based类的dispatch方法:

代码语言:javascript
复制
from django.db import transaction

def dispatch(self, request_type, request, **kwargs):
    with transaction.atomic():
        return super(UsersResource, self).dispatch(request_type, request, **kwargs)

dispatch被Django调用来处理整个周期,所以要么一切都成功,要么事务被回滚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34877607

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档