@ tornado.web.asynchronous decorator是什么意思?

时间:2013-01-29 12:02:26

标签: python tornado

  1. 如果代码没有使用这个装饰器,它是非阻塞的吗?
  2. 为什么这个名字是异步的,这意味着添加装饰器让代码异步?
  3. 为什么@ tornado.gen总是和@ tornado.web.asynchronous一起使用?

3 个答案:

答案 0 :(得分:22)

@tornado.web.asynchronous prevents the the RequestHandler from automatically calling self.finish()。就是这样;它只是意味着Tornado将保持连接打开,直到您手动调用self.finish()

  1. 不使用此装饰器的代码可以阻止或不阻止。使用装饰器不会以任何方式改变它。

  2. 正如@Steve Peak所说,你使用装饰器进行异步请求,例如:数据库检索。

  3. 针对Tornado 3.1+进行了更新:如果您使用@gen.coroutine,则也不需要使用@asynchronous。我相信较旧的@gen.engine界面仍然需要@asynchronous

答案 1 :(得分:5)

  1. 在这里回答:asynchronous vs non-blocking

  2. 这样想。当您需要请求说出数据库或其他URL来检索数据时,您不希望阻止龙卷风IO。因此@tornado.web.asynchronous将允许IO在等待加载内容时处理其他请求(例如数据库或URL)。

  3. 他们是相似的。您很可能会使用@tornado.web.asynchronous

答案 2 :(得分:0)

@tornado.web.asynchronous基本上只是一个标记,你放在像get()post()这样的处理程序方法上,告诉框架它不应该自动调用finish()当方法返回时,因为它包含将要设置finish()以便稍后调用的代码。

相关问题