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)
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 –