use*_*036 1 python google-app-engine app-engine-ndb google-cloud-datastore
下面的代码应创建一个Counter模型并使用(延迟)任务将计数器增加到10.访问时'/'应该创建一个单独的Counter对象count = 10.这在生产中发生.在开发(localhost)Counter中,创建了多个对象,其中最大的对象为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!'
Run Code Online (Sandbox Code Playgroud)
生产"同步性"很明显,不能保证(在您的方法中).总是会发生在查询中找不到新创建的计数器,因此您的代码可能会创建多个计数器.
有关Google Cloud Datoreore的此平衡强大和最终一致性的更多详细信息.
| 归档时间: |
|
| 查看次数: |
281 次 |
| 最近记录: |