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 回答