Google App Engine pozwala _post_put_hook(self, future)
, udokumentowane w sposób następujący:Kiedy model _post_put_hook modelu ndb ma inną przyszłość niż ja? NDB
hak, który biegnie po put()
Aby zrozumieć ten hak lepiej, zastanawiam się kiedy self
będzie różnił się od wyniku Argument future
.
Dokumentacja Model Hooks zapewnia:
Jeśli używasz post-haki z asynchronicznymi API, haki są wywoływane przez wywołanie check_result(), get_result() lub otrzymując (wewnątrz tasklet) przyszłość metoda transmisji asynchronicznej jest. Post hooks nie sprawdzają, czy RPC się powiodło; zaczep działa bez względu na awarię.
Wszystkie post-haki mają argument Future na końcu podpisu połączenia. Ten obiekt Future zawiera wynik działania. Możesz wywołać metodę get_result() w tej przyszłości, aby pobrać wynik; możesz być pewien, że funkcja get_result() nie będzie blokować, ponieważ Przyszłość jest zakończona przed wywołaniem haka.
Jednakże gdy zgłoszę put
asynchronicznie tak:
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()
Wyjścia:
self.xyz: None, future.xyz: None
self.xyz: abc, future.xyz: abc
W kontekście 'put_async', myślę, że można by zasadnie oczekiwać self
do być modelem przed modyfikacją, a model future
jest modelem, który został zapisany. W przeciwnym razie nie jest jasne, jaki cel miałby cel future
w kontekście .
Kiedy będą self
i future
różnić się w kontekście put
? Jaki jest cel tutaj future
?
Dzięki - to pouczające i wnikliwe. –