Gibt es eine eingebaute oder kanonische Methode, um die ersten und alle aufeinanderfolgenden Ergebnisse für einen ndb.get_multi_async
Aufruf in der Reihenfolge ihrer Fertigstellung zu konsumieren?ndb aysnc "yield next" zu verbrauchen get_multi_async
Ich würde zu erwarten, und dies zeigt, es entlang der Linien von:
def yield_next(futures):
while futures:
yield ndb.Future.wait_any(futures)
# We have to remove the yielded future from the futures.
# How do we know which future was removed?
# ... futures.remove(???)
for model in yield_next(ndb.get_multi_async(keys)):
...
Eine Möglichkeit, die Zukunft verbraucht zu entfernen, ist futures
zu überprüfen, um zu sehen, ob es gemacht wird. Es ist eine Race-Bedingung inhärent: Wenn alle Futures gleichzeitig oder in jedem Fall vor dem remove
Aufruf abgeschlossen sind, können mehrere Elemente von futures
getan werden. Mir ist sonst keine zuverlässige Möglichkeit bekannt, welche Zukunft verbraucht wurde.
Man würde erwarten, dass dies ein ziemlich häufiges Muster ist, aber ich habe es nicht gelöst gesehen. Wenn man durch ndb/tasklets.py
schaut, scheint es einige exotische (lies: undokumentierte) Möglichkeiten wie ReducingFuture
oder MultiFuture
zu geben, aber ich habe sie nie benutzt. Vielleicht liegt die Antwort bei den Tasklets selbst.