我有两个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
字......
我的代码出了什么问题?
答案 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请求。