我使用Django 1.7.3作为我的框架,使用Tastypie 0.11.1作为rest api库。我有一个名称字段的基本模型和一个用于创建此模型的api。
我的问题是在尝试创建模型时的临界区(竞争条件)。
我已经尝试了transaction.atomic并在数据库级别上设置了ATOMIC_REQUESTS = True,但是当我发送两个请求作为比赛时,我收到了两个相同的行。
有没有办法确保Tastypie save函数是原子的?或者有什么方法可以确保请求是原子的?
发布于 2016-01-20 06:25:31
我需要看看:
如果您碰巧使用了greenthread、多个worker和/或多个服务器,那么这两个请求实际上可能被无序处理。
我强烈建议更改您的代码,使其不在远程资源上执行并发操作;请等到一个请求完成后再启动下一个请求。
发布于 2018-01-30 18:27:35
在这种情况下,特别是在涉及save_m2m的情况下,我所做的就是覆盖我的ModelResource-based类的dispatch方法:
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调用来处理整个周期,所以要么一切都成功,要么事务被回滚。
https://stackoverflow.com/questions/34877607
复制相似问题