Python 如何理解appengine ndb.tasklet?
发件人: NDB tasklet是一段代码,可以与并发运行 其他代码。如果您编写了一个tasklet,那么您的应用程序可以大量使用它 就像它使用异步NDB函数一样:它调用tasklet 返回未来;稍后,调用Future的get_result()方法 结果呢 文档中的解释和示例对我来说真的很神奇。 我可以使用它,但我觉得很难正确理解它 例如:Python 如何理解appengine ndb.tasklet?,python,google-app-engine,tasklet,Python,Google App Engine,Tasklet,发件人: NDB tasklet是一段代码,可以与并发运行 其他代码。如果您编写了一个tasklet,那么您的应用程序可以大量使用它 就像它使用异步NDB函数一样:它调用tasklet 返回未来;稍后,调用Future的get_result()方法 结果呢 文档中的解释和示例对我来说真的很神奇。 我可以使用它,但我觉得很难正确理解它 例如: 我可以在函数中放入任何类型的代码并将其装饰为ndb.tasklet吗?之后将其用作异步函数。或者一定是appengine RPC 这种装饰也适用于我的电脑吗
如果您看一看未来的实现,它与python中的生成器非常相似。事实上,它使用相同的
yield
关键字来实现它所说的功能。请阅读下面的说明
当您使用@tasklet decorator时,它会创建未来并等待包装函数上的值。如果该值是生成器,则会将未来添加到事件循环中。当您对未来yield
时,事件循环将运行所有排队的未来,直到您想要的未来准备就绪。这里的并发性是,每个Future将执行其代码,直到返回(使用raisendb.Return(…)
或函数完成)、抛出异常或再次使用yield
。我猜从技术上讲,您可以在代码中使用yield
,只是为了停止执行该函数,而让事件循环继续运行其他未来,但我认为这不会有多大帮助,除非您真正考虑到一个聪明的用例
回答您的问题:
yield
。通常在GAE中,它会一直工作到RPC调用