class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(request):
request.render("../resouce/index.html")
我总是阅读上面的一些龙卷风代码,混淆了添加这个装饰器的目的是什么?我知道添加这个装饰器,我们应该手动调用self.finish()
,但这样做有什么好处?
谢谢!
答案 0 :(得分:3)
通常,当处理程序方法返回时,会为您调用finish()
,但如果您的处理程序依赖于异步计算的结果(如HTTP请求),那么它将无法完成方法返回的时间。相反,它应该在一些回调中完成。
来自the documentation的示例很有启发性:
class MyRequestHandler(web.RequestHandler):
@web.asynchronous
def get(self):
http = httpclient.AsyncHTTPClient()
http.fetch("http://friendfeed.com/", self._on_download)
def _on_download(self, response):
self.write("Downloaded!")
self.finish()
如果没有装饰器,在输入_on_download
时,请求就已经完成了。
如果您的处理程序没有执行任何异步操作,那么添加装饰器就没有任何好处。