这样做是否安全?
@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
在最新时刻能够执行我的其他代码而实体正在后台获取。
答案 0 :(得分:2)
是的,这是安全的!
如果在ndb中检查Future类,它将在完成时设置结果,多个yield或get_result将检查它是否已完成并返回存储的结果。
google / appengine / ext / ndb / tasklets.py,SDK 1.7.4中的第324行