不止一次产生ndb.Future是否安全?

时间:2013-02-12 15:15:27

标签: google-app-engine app-engine-ndb

这样做是否安全?

@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在最新时刻能够执行我的其他代码而实体正在后台获取。

1 个答案:

答案 0 :(得分:2)

是的,这是安全的!

如果在ndb中检查Future类,它将在完成时设置结果,多个yield或get_result将检查它是否已完成并返回存储的结果。

google / appengine / ext / ndb / tasklets.py,SDK 1.7.4中的第324行