下面应该创建一个 Counter 模型并使用(延迟的)任务将计数器递增到 10。访问 '/' 应该创建一个 对象。这发生在生产中。在开发中(本地主机)创建了多个 count = 10 的 CounterCounter 对象,最大为 10:
我怀疑这是因为 put 在开发中不是同步的(但似乎总是在生产中)。有没有办法让它们同步?
下面的代码片段:
class Counter(ndb.Model):
count = ndb.IntegerProperty(indexed=False)
def reset():
ndb.delete_multi(Counter().query().fetch(keys_only=True, use_cache=False, use_memcache=False))
def increment():
counter = Counter().query().get(use_cache=False, use_memcache=False)
if not counter:
counter = Counter(count=0)
counter.count += 1
counter.put()
if counter.count < 10:
deferred.defer(increment)
@app.route('/')
def hello():
"""Return a friendly HTTP greeting."""
reset()
deferred.defer(increment)
return 'Hello World!'
请您参考如下方法:
生产“同步性”是显而易见的,不能保证(在您的方法中)。在查询中找不到新创建的计数器的情况总是会发生,因此您的代码可能会创建多个计数器。
此 Balancing Strong and Eventual Consistency with Google Cloud Datastore 中有更多详细信息文章。
