理解@ gen.coroutine注释

时间:2016-06-03 11:04:26

标签: python tornado

我知道我的问题看起来很广泛,但我希望这个问题的答案会给我正确的指导。我是Tornado框架的新手,基本上我是Python新手。 我正在研究这个project: 能否请您解释几行代码:

@gen.coroutine
def get_me(self):
    raise gen.Return((yield self._api.get_me()))
  • @gen.coroutine注释的用途是什么?
  • raise关键字用于例外,不是吗?为什么我们在这里使用它?
  • 为什么我们以generator的形式返回所有内容。 Tornado框架的概念是使用生成器吗?是什么原因?

2 个答案:

答案 0 :(得分:3)

答案 1 :(得分:1)

在Tornado文档之后,我发现确保异步行为的一般方法是使用事件循环和回调函数。但是使用回调在语法上很困难并且有点令人困惑。所以龙卷风的开发者想出了装饰器的使用(就像烧瓶,樱桃等)。

  • 当您按照Tornado的源代码进行操作时,您会看到gen.py模块,在该模块下定义了协程装饰器。这确实是确保Tornado并发性的一种优雅方式。
  • raise将处理异常。我发现它很简单,只需返回except gen.Return
  • 龙卷风使用generators只是简单易用。