2

これを行うのは安全ですか?

@ndb.tasklet
def foo():
    # Note that I do not yield right here
    future = some_key.get_async()

    # Perform some other code

    if some_condition:
        # I need the get_async result here
        entity = yield future

    # I also need the get_async result here.
    # If some_condition was true, I would be yielding this future
    # for the second time. Is this ok?
    entity = yield future

yield関数の先頭だけでentity、残りのコードで使用できるとは言わないでください。私の実際の機能はこれよりも少し複雑で、使用する必要がある可能性のある条件付きコードパスがいくつかあり、エンティティがバックグラウンドでフェッチされている間に他のコードを実行できるようにしentityたいと考えています。yield

4

1 に答える 1

2

はい、安全です!

ndb で Future クラスを確認すると、完了時に結果が設定され、複数の yield または get_result が完了したかどうかが確認され、保存された結果が返されます。

google/appengine/ext/ndb/tasklets.py、SDK 1.7.4 の 324 行目

于 2013-02-12T21:31:00.323 に答える