2016-11-11 42 views
0

我开始寻找龙卷风并开始阅读user guide。不过我发现关于协程的东西很迷惑。一方面文档讲述了装饰@gen.coroutine如何让事情变得更容易,但在另一方面,它会告诉你,那:龙卷风协同作业的原生协程Python 3.5的优势

的Python 3.5引入了异步伺机关键字(使用这些关键字功能也被称为“原生协同程序”)。从Tornado 4.3开始,您可以使用它们来代替基于收益率的协同程序。只需使用async def foo()代替使用@ gen.coroutine修饰器的函数定义,并等待代替yield。本文档的其余部分仍使用与旧版本的Python的兼容性产量的风格,但异步和等待的运行速度更快可用时:[...]

所以,现在我想:“OK那么,只需使用asyncawait就可以了。“但是,在所有示例中,文档始终使用装饰器,而不是关键字async

有一节关于如何调用协程。文档中写入的内容对于本机关键字仍然如此?

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

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

+0

Python将处于过渡状态一段时间;协程将最终替代旧的基于生成器的异步代码,因为3.5已成为标准。 –

+0

相关:[PEP 0492 - Python 3.5异步关键字](// stackoverflow.com/q/31291129) –

回答

1

文档一样说,如果你在Python 3.5使用异步和等待,不“gen.coroutine”装饰器和“yield”。在Python 3.5中,使用装饰器和“yield”没有任何优势。

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

要在Python 3.5中调用协程,请使用“await”而不是“yield”。指南中该部分的其他内容仍然正确。

+0

所以如果我只是学习'async'和'await'(在其他一些教程中),然后重写所有示例在使用'await'和'async'的龙卷风指南中,我会好吗?我可以跳过整个“以这种方式调用异步函数,这样称呼它们”的东西?还是有什么本地关键字不能做的,我需要使用龙卷风的东西,并需要了解? – Zelphir

+0

对,如果你在Python 3.5中,使用装饰器和“yield”没有任何优势。但是请阅读底部的“协同模式”部分,再简单地替换异步并等待装饰器和产量:http://www.tornadoweb.org/en/stable/guide/coroutines.html#coroutine-patterns –