NDB tasklet和yield
是执行异步/并行代码的好方法。但是,从文档中可以清楚地看出,这种机制是否可以安全地与非{n}异步函数一起使用,例如images.get_serving_url_async()
。
NDB Asynchronous Operation documentation page有一个非常小的部分,关于使用NDB上下文自己的urlfetch_async()
版本,在那里陈述(强调我的):
URL Fetch服务有自己的异步请求API。 这很好,但并不总是很容易使用NDB tasklet 。
我不太清楚为什么“并不总是很容易使用NDB tasklets”,这让我想知道相同的陈述是否适用于images.get_serving_url_async()
。
所以我的问题是:如果我这样做,我会遇到麻烦吗?
@ndb.tasklet
def foo():
url = yield images.get_serving_url_async(image_key)
答案 0 :(得分:4)
很好。 yield将等待RPC并允许其他tasklet在等待时运行。关于urlfetch的评论只是关于它笨拙的API。