我开始研究龙卷风并开始阅读user guide。但是我发现关于协同程序的内容非常令人困惑。一方面,文档告诉你装饰器@gen.coroutine
如何使事情变得更容易,但另一方面它告诉你:
Python 3.5引入了async和await关键字(使用这些关键字的函数也称为“native coroutines”)。从Tornado 4.3开始,您可以使用它们代替基于产量的协同程序。只需使用async def foo()代替@ gen.coroutine装饰器的函数定义,然后等待yield。本文档的其余部分仍然使用yield样式来与旧版本的Python兼容,但async和await在可用时运行得更快:[...]
所以现在我在想:“好的,只需一直使用async
和await
并完成它。”然而,在所有示例中,然后文档继续使用装饰器而不是关键字async
。
有一节介绍如何调用协程。文档写的内容仍然适用于原生关键字吗?
这些装饰器给了我什么,所以我应该使用它们而不是原生的Python 3.5语法?
(我正在使用Python 3.5进行我的学习项目,所以我不关心向后兼容性。)
答案 0 :(得分:1)
就像文档说的那样,如果你在Python 3.5中使用async并等待,而不是“gen.coroutine”装饰器和“yield”。在Python 3.5中,使用装饰器和“yield”没有任何优势。
本教程使用较旧的样式,以便与旧版本的Python兼容。
要在Python 3.5中调用协程,请使用“await”而不是“yield”。指南该部分的其他所有内容仍然正确。