Tornado 的协程与 Python 3.5 的本机协程相比的优势



我开始研究Tornado并开始阅读用户指南。然而,我发现协程的东西非常令人困惑。一方面,文档告诉您装饰器@gen.coroutine如何使事情变得更容易,但另一方面,它告诉您:

Python 3.5引入了async和await关键字(使用这些关键字的函数也被称为"本机协程")。从Tornado 4.3开始,您可以使用它们来代替基于yield的协程。只需使用async def()来代替带有@gen的函数定义。协程装饰器,用await代替yield。为了与旧版本的Python兼容,本文档的其余部分仍然使用yield样式,但是async和await在可用时将运行得更快:[…]

所以现在我在想:"好吧,只要一直使用asyncawait就行了。"然而,在所有的例子中,文档总是继续使用装饰符而不是关键字async

有一节是关于如何调用协程的。文档中所写的内容对于本机关键字仍然正确吗?

这些装饰器给了我什么,所以我应该使用它们而不是原生Python 3.5语法?

(我在这个学习项目中使用Python 3.5,所以我不关心向后兼容性。)

就像文档所说的,如果你在Python 3.5中使用async和await,而不是"gen.coroutine"装饰器和"yield"。在Python 3.5中,使用装饰符和"yield"没有任何好处。

为了与旧版本的Python兼容,本教程使用旧的样式。

在Python 3.5中调用协程,使用"await"而不是"yield"。

相关内容

最新更新