2013-02-12 11 views
6

Zestawy zadań NDB i yield to świetny sposób na wykonywanie kodu asynchronicznego/równoległego. Jednak z dokumentacji nie wynika jasno, czy ten mechanizm może być bezpiecznie użyty z funkcjami asynchronicznymi innymi niż ndb, takimi jak images.get_serving_url_async().Czy można bezpiecznie używać metody images.get_serving_url_async() wewnątrz zadania ndb?

NDB Asynchronous Operation documentation page ma bardzo niewielką część o użyciu kontekście NDB własną wersję urlfetch_async(), w którym stwierdza się (podkreślenie moje):

URL Fetch usługa ma swój własny asynchronicznego żądania API. Jest w porządku, ale nie zawsze jest łatwy w użyciu z zadaniami NDB.

To nie jest dla mnie jasne, dlaczego jest to „nie zawsze jest łatwy w użyciu tasklets NDB”, a to sprawia, że ​​zastanawiam się, czy to samo stwierdzenie odnosi się do images.get_serving_url_async().

Moje pytanie brzmi: czy popadnę w kłopoty, jeśli to zrobię?

@ndb.tasklet 
def foo(): 
    url = yield images.get_serving_url_async(image_key) 
+0

Zgodnie z tym odrzuconym żądaniem funkcji, wygląda na to, że mógłbym "zwrócić" zwrócony obiekt RPC zwrócony przez 'get_serving_url_async()'. http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=151 –

Odpowiedz

4

Jest w porządku. Wydajność będzie czekać na RPC i zezwolić na uruchamianie innych zadań podczas oczekiwania. Komentarz na temat urlfetch dotyczył właśnie jego niezdarnego API.

Powiązane problemy