Google App Engine 的 ndb 提供了一个_post_put_hook(self, future)
,记录如下:
在 put() 之后运行的钩子
为了更好地理解这个钩子,我想知道什么时候self
会与future
论证的结果不同。
模型挂钩文档提供:
如果你使用带有异步 API 的后挂钩,挂钩会通过调用 check_result()、get_result() 或产生(在 tasklet 中)异步方法的未来来触发。Post hook 不检查 RPC 是否成功;无论失败,钩子都会运行。
所有 post-hook 在调用签名的末尾都有一个 Future 参数。此 Future 对象保存操作的结果。您可以在此 Future 上调用 get_result() 来检索结果;您可以确定 get_result() 不会阻塞,因为 Future 在调用钩子时已经完成。
但是,当我put
像这样异步调用时:
from google.appengine.ext import ndb
class MyModel(ndb.Model):
xyz = ndb.StringProperty()
def _post_put_hook(self, future):
print "self.xyz: {}, future.xyz: {}".format(
self.xyz, future.get_result().get().xyz))
m = MyModel()
f = m.put_async()
f.wait()
m.xyz = 'abc'
f = m.put_async()
f.wait()
输出:
self.xyz: None, future.xyz: None
self.xyz: abc, future.xyz: abc
在“put_async”的上下文中,我认为人们可能合理地期望 是self
修改前的模型,而future
是现在保存的模型。否则,不清楚future
在put
上下文中会有什么目的。
在 a 的上下文中什么时候会self
和不同?来这里的目的是什么?future
put
future