Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Django-Tastypie原子操作_Python_Django_Tastypie - Fatal编程技术网

Python Django-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调用的

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

我的问题是,在尝试创建模型时,关键部分(竞赛条件)存在问题

我已经尝试了transaction.atomic并在db级别上设置了atomic_REQUESTS=True,但是当我以竞争方式发送两个请求时,我收到了两个相同的行

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

我需要查看:

  • 进行API调用的代码
  • 您对资源所做的任何更改
  • 这是部署在哪种堆栈上的
  • 如果您碰巧使用了greenthreads、多个Worker和/或多个服务器,那么这两个请求可能实际上被无序处理

    我强烈建议您更改代码,不要在远程资源上执行并发操作;等待一个请求完成后再开始下一个请求。

    我需要查看:

  • 进行API调用的代码
  • 您对资源所做的任何更改
  • 这是部署在哪种堆栈上的
  • 如果您碰巧使用了greenthreads、多个Worker和/或多个服务器,那么这两个请求可能实际上被无序处理


    我强烈建议您更改代码,不要在远程资源上执行并发操作;等待一个请求完成后再开始下一个请求。

    我在这种情况下所做的工作,特别是涉及到
    保存\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。我也不明白你为什么不能一个接一个地提出要求。