[英]What is the benefit of adding a @tornado.web.asynchronous decorator?
class IndexHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(request):
request.render("../resouce/index.html")
我总是阅读上面的一些龙卷风代码,混淆了添加这个装饰器的目的是什么? 我知道添加这个装饰器,我们应该手动调用self.finish()
,但这样做有什么好处?
谢谢 !
通常,当处理程序方法返回时,会为您调用finish()
,但如果您的处理程序依赖于异步计算的结果(如HTTP请求),那么在方法返回时它将不会完成。 相反,它应该在一些回调中完成。
文档中的示例很有启发性:
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
,请求就已经完成了。
如果你的处理程序没有做任何异步,那么添加装饰器没有任何好处。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.