我的python龙卷风代码不起作用......为什么

时间:2014-12-17 12:52:36

标签: python tornado

我有两个Handler类来比较@ tornado.web.asynchronous装饰器

class Test1Handler(tornado.web.RequestHandler):  
    def get(self):  
        for i in range(1, 100000):  
            print "kill time"  
        self.write("hello")  

class Test2Handler(tornado.web.RequestHandler):  
    @tornado.web.asynchronous
    def get(self):  
        http = tornado.httpclient.AsyncHTTPClient()  
        http.fetch("http://localhost:8005/test1", callback=self._test_callback)  
        self.write("Hello to the Tornado world! ")  

    def _test_callback(self, response): 
        print response.body
        self.write(response.body)  

以下是配置代码

app = tornado.web.Application([
    (r'/test1', Test1Handler),
    (r'/test2', Test2Handler)], debug=True)
app.listen(8005)
tornado.ioloop.IOLoop.instance().start()

好的,当我run http://localhost:8005/test1几秒钟后我就能看到你好......

但是当我run http://localhost:8005/test2时,页面只是加载和加载...我应该看到Hello to the Tornado world! Hello但我永远看不到最后一个Hello字......

我的代码出了什么问题?

2 个答案:

答案 0 :(得分:1)

当您使用tornado.web.asynchronous装饰器时,您需要明确调用finish方法来完成http请求。

def _test_callback(self, response): 
    self.write(response.body)  
    self.finish()  # <------

答案 1 :(得分:1)

您似乎错过了装饰为asynchronous的处理程序中的self.finish()

  

如果给出了这个装饰器,则方法返回时响应未完成。由请求处理程序调用self.finish()来完成HTTP请求。