Gli tasklet NDB e yield
sono un ottimo modo per eseguire il codice asincrono/parallelo. Tuttavia, non è chiaro dalla documentazione se questo mecanismo può essere tranquillamente utilizzato con funzioni asincrone non ndb come images.get_serving_url_async()
.È sicuro utilizzare images.get_serving_url_async() all'interno di un tasklet ndb?
Il NDB Asynchronous Operation documentation page ha una sezione molto piccola sull'utilizzo propria versione del contesto NDB di urlfetch_async()
, in cui si afferma (sottolineatura mia):
L'URL Fetch servizio ha la sua richiesta API asincrona. Va bene, ma non è sempre facile da utilizzare con le attività attività NDB.
Non è del tutto chiaro per me il motivo per cui "non è sempre facile da usare con tasklets NDB", e questo mi fa chiedo se lo stesso si applica a images.get_serving_url_async()
.
Quindi la mia domanda è: mi metterò nei guai se faccio questo?
@ndb.tasklet
def foo():
url = yield images.get_serving_url_async(image_key)
In base a questa richiesta di funzionalità rifiutata, sembra che potrei semplicemente restituire l'oggetto RPC restituito restituito da get_serving_url_async() '. http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=151 –