2

这是一个好习惯吗?一位用户提出请求并从数据存储中获取实体,对其进行更改并保存。另一个用户同时对同一实体执行此操作。如果第一个用户的请求尚未完成,第二个用户会看到第一个用户的更改吗?如果我希望两个用户达成“协议”,我应该使用什么模式?第一个说“是”,然后第二个说“是”,然后交易就完成了。我必须使用来自客户端的轮询来监控它吗?

4

1 回答 1

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"

这只是一个例子,它没有优化,也没有检查是否已经有协议。剩下的由你决定

于 2012-12-25T13:59:34.563 回答