如何处理一个实体的快速ndb查询?

时间:2014-08-12 15:01:43

标签: python multithreading google-app-engine google-cloud-datastore app-engine-ndb

如果从客户端到一个函数有两个或更多个发布请求,其中服务器更改一个实体,则第二个请求可以在第一次放入之前获取此实体。因此,当第二个请求放置实体时,它会重写第一个请求的更改。如何防止这种影响?

这里有一些例子(将元素添加到列表中):

class SomeHandler(webapp2.RequestHandler):
    def post(self):
        logging.info("SomeHandler post")
        name = self.request.get("name")
        element = self.request.get("element")
        x = X.query(X.name == name).fetch(1)[0]

        # some stuff, that takes time            

        x.list.append(element)
        logging.info("Putting entity")
        x.put()

因此,如果两个帖子请求足够快,那么日志可能如下所示:

SomeHandler post
SomeHandler post
Putting entity
Putting entity

insted的

SomeHandler post
Putting entity
SomeHandler post
Putting entity

只会添加第二个元素。

1 个答案:

答案 0 :(得分:2)

这正是transactions的原因。