谷歌App Engine的NDB提供了一個_post_put_hook(self, future)
,記載如下:該項目建成後()運行什麼時候ndb模型的_post_put_hook有一個與自己不同的未來?
要理解這一點鉤更好
胡克,我不知道什麼時候
self
將結果不同future
的說法。的Model Hooks文檔提供:
如果使用後掛鉤異步API中,鉤子通過調用check_result(),get_result()或產生(一個tasklet內)異步方法的未來觸發。 Post鉤子不檢查RPC是否成功;無論失敗,掛鉤都會運行。
所有掛鉤在呼叫簽名末尾都有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
的用途。
self
和future
何時會在put
的背景下有所不同?這裏的future
的目的是什麼?
謝謝 - 這是豐富和有見地的。 –