答案 0 :(得分:22)
@tornado.web.asynchronous
prevents the the RequestHandler
from automatically calling self.finish()
。就是这样;它只是意味着Tornado将保持连接打开,直到您手动调用self.finish()
。
不使用此装饰器的代码可以阻止或不阻止。使用装饰器不会以任何方式改变它。
正如@Steve Peak所说,你使用装饰器进行异步请求,例如:数据库检索。
针对Tornado 3.1+进行了更新:如果您使用@gen.coroutine
,则也不需要使用@asynchronous
。我相信较旧的@gen.engine
界面仍然需要@asynchronous
。
答案 1 :(得分:5)
这样想。当您需要请求说出数据库或其他URL来检索数据时,您不希望阻止龙卷风IO。因此@tornado.web.asynchronous
将允许IO在等待加载内容时处理其他请求(例如数据库或URL)。
他们是相似的。您很可能会使用@tornado.web.asynchronous
。
答案 2 :(得分:0)
@tornado.web.asynchronous
基本上只是一个标记,你放在像get()
或post()
这样的处理程序方法上,告诉框架它不应该自动调用finish()
当方法返回时,因为它包含将要设置finish()
以便稍后调用的代码。