2013-02-12 11 views
6

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) 
+0

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 –

risposta

4

Va bene. Il rendimento attenderà l'RPC e consentirà l'esecuzione di altri tasklet in attesa. Il commento su urlfetch era solo sulla sua goffa API.

Problemi correlati