繁体   English   中英

添加@ tornado.web.asynchronous装饰器有什么好处?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM