出现错误的原因
tornado.web.asynchronous在tornado5.1版本中已弃用,并在tornado6.0中已删除,用coroutines代替。
原本的代码样例
class MainHandler(tornado.web.RequestHandler):
@tornado.web.asynchronous
def get(self):
http_ = tornado.httpclient.AsyncHTTPClient()
response = await http_.fetch('https://www.baidu.com')
self.on_response(response)
def on_response(self, response):
if response.error:
raise tornado.web.HTTPError(500)
self.write(response.body)
self.finish()
def make_app():
# 此处是路由,访问 http://127.0.0.1:8888/n
# url handler
handlers = [(r'/n', MainHandler)]
return tornado.web.Application(handlers)
def main():
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
if __name__ == '__main__':
main()
新版的代码样例
import tornado.web
import tornado.httpclient
import tornado.ioloop
import tornado.gen
class MainHandler(tornado.web.RequestHandler):
@tornado.gen.coroutine
def get(self):
http_ = tornado.httpclient.AsyncHTTPClient()
response = yield http_.fetch('https://www.baidu.com')
self.on_response(response)
def on_response(self, response):
if response.error:
raise tornado.web.HTTPError(500)
# 返回的响应会有重定向,所以为了测试明显写的是已回复
# self.write(response.body)
print(response.body)
self.write('已回复')
self.finish()
def make_app():
# 此处是路由,访问 http://127.0.0.1:8888/n
# url handler
handlers = [(r'/n', MainHandler)]
return tornado.web.Application(handlers)
def main():
app = make_app()
app.listen(8888)
tornado.ioloop.IOLoop.current().start()
if __name__ == '__main__':
main()
学习中遇到的问题,记录&分享