Python Django-Tastypie原子操作
我使用Django 1.7.3作为我的框架,使用Tastypie 0.11.1作为rest api库。 我有一个带有名称字段的基本模型和一个用于创建此模型的api 我的问题是,在尝试创建模型时,关键部分(竞赛条件)存在问题 我已经尝试了transaction.atomic并在db级别上设置了atomic_REQUESTS=True,但是当我以竞争方式发送两个请求时,我收到了两个相同的行 有没有办法确保Tastypie保存函数是原子的?或者以任何方式确保请求是原子的?我需要查看:Python Django-Tastypie原子操作,python,django,tastypie,Python,Django,Tastypie,我使用Django 1.7.3作为我的框架,使用Tastypie 0.11.1作为rest api库。 我有一个带有名称字段的基本模型和一个用于创建此模型的api 我的问题是,在尝试创建模型时,关键部分(竞赛条件)存在问题 我已经尝试了transaction.atomic并在db级别上设置了atomic_REQUESTS=True,但是当我以竞争方式发送两个请求时,我收到了两个相同的行 有没有办法确保Tastypie保存函数是原子的?或者以任何方式确保请求是原子的?我需要查看: 进行API调用的
我强烈建议您更改代码,不要在远程资源上执行并发操作;等待一个请求完成后再开始下一个请求。我在这种情况下所做的工作,特别是涉及到
保存\u m2m
的情况,将覆盖基于模型资源的类的分派方法:
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
来处理整个周期,因此,要么一切都成功,要么事务回滚。在这种情况下,我所做的工作,尤其是涉及save\u m2m
的情况,是覆盖了基于ModelResource
的类的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)
Django调用dispatch
来处理整个周期,因此要么一切顺利,要么事务回滚。这是一个具有多个服务器的重新分发系统。我无法阻止每次只处理一个请求。我很想帮助你,但实际上没有任何事情要做。如果请求被无序处理,那么tastypie对此无能为力,也许您可以配置负载平衡器和/或反向代理,以按照每个用户/会话向相同的服务器发送请求。为了确定是否存在这种情况,您可以添加一些日志中间件,添加一个以毫秒或更高精度表示当前时间戳的X-header。我也不明白为什么你不能一个接一个地请求。这是一个重新分配的系统,有几个服务器。我无法阻止每次只处理一个请求。我很想帮助你,但实际上没有任何事情要做。如果请求被无序处理,那么tastypie对此无能为力,也许您可以配置负载平衡器和/或反向代理,以按照每个用户/会话向相同的服务器发送请求。为了确定是否存在这种情况,您可以添加一些日志中间件,添加一个以毫秒或更高精度表示当前时间戳的X-header。我也不明白你为什么不能一个接一个地提出要求。