2013-02-12 15 views
6

NDBタスクレットとyieldは、非同期/並列コードを実行するのに最適です。しかし、このメカニックがimages.get_serving_url_async()のようなnon-ndb非同期関数で安全に使用できるかどうかは、ドキュメントからはっきりと分かりません。ndbタスクレット内でimages.get_serving_url_async()を使用しても安全ですか?

URLフェッチサービスは、独自の非同期要求のAPIを持っています

NDB Asynchronous Operation documentation pageは、それが記載されているurlfetch_async()、(強調鉱山)のNDBコンテキストの独自のバージョンを使用してについて非常に小さな部分を持っています。 NDBのタスクレットで使用するのは大丈夫ですが、いつも使いやすいとは限りません

「常にNDBのタスクレットを使用することは容易ではない」である理由は私には非常に明確ではないが、これは、同じ文がimages.get_serving_url_async()に適用されるなら、私は思ってしまいます。

私の質問は次のとおりです。これを行うと問題になるのですか?

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

この拒否された機能要求によれば、 'get_serving_url_async()'によって返された返されたRPCオブジェクトを 'yield 'できるように見えます。 http://code.google.com/p/appengine-ndb-experiment/issues/detail?id=151 –

答えて

4

これは問題ありません。 yieldはRPCを待っており、待機している間に他のタスクレットを実行できるようにします。 urlfetchについてのコメントは、不器用なAPIについてのものでした。

関連する問題