两个用户请求修改Google App Engine应用程序中的同一数据存储区实体?

时间:2012-12-25 07:50:24

标签: google-app-engine

这是一个好习惯吗?一个用户从数据存储区发出请求并获取实体,更改并保存。另一个用户与同一实体同时执行此操作。如果第一个用户的请求尚未完成,第二个用户是否会看到第一个用户的更改?如果我希望两个用户签订“协议”,我应该使用什么模式?首先说“是”,比第二个说“是”,比交易完成。我是否必须使用来自客户端的轮询来监控它?

1 个答案:

答案 0 :(得分:2)

您需要进行交易。

请阅读此处了解更多信息和做法:https://developers.google.com/appengine/docs/python/datastore/overview

事务发生在第一个提交胜利的逻辑上! 但重试是可能的......

@db.transactional(retries=3)
def make_agreement_for_user_a(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_a:
        return "User A has already agreed"
    agreement.user_a = TRUE
    agreement.put()
    if agreement.user_b:
        return "Agreement complete"
    return "User A agreed"

@db.transactional(retries=3)
def make_agreement_for_user_b(agreement):
    agreement = Agreement.get(agreement)
    if agreement.user_b:
        return "User B has already agreed"
    agreement.user_b = TRUE
    agreement.put()
    if agreement.user_a:
        return "Agreement complete"
    return "User B agreed"

这只是一个例子而且没有优化,也没有检查是否已经达成协议。 其余的由你决定