tornado 异步使用

Posted on Posted in tornado
Tips: 本文创建于2016年8月19日,已超过 2 年,内容或图片可能已经失效!

> 先看下同步

  1. #!/usr/bin/evn python  
  2. # coding:utf-8  
  3. import tornado.httpserver  
  4. import tornado.ioloop  
  5. import tornado.options  
  6. import tornado.web  
  7. import tornado.httpclient  
  8.   
  9. import json  
  10.   
  11. from tornado.options import define, options  
  12. define('port',default=9000,help='run on the given port', type=int)  
  13.   
  14. class IndexHandler(tornado.web.RequestHandler):  
  15.     def get(self):  
  16.         client = tornado.httpclient.HTTPClient()  
  17.         response = client.fetch("http://ip.taobao.com//service/getIpInfo.php?ip=101.254.142.211")  
  18.         body = json.loads(response.body)  
  19.         self.write(body)  
  20.   
  21. if __name__ == "__main__":  
  22.     tornado.options.parse_command_line()  
  23.     app = tornado.web.Application(handlers=[(r'/', IndexHandler)])  
  24.     http_server = tornado.httpserver.HTTPServer(app)  
  25.     http_server.listen(options.port)  
  26.     tornado.ioloop.IOLoop.instance().start()  

> 异步

  1. #!/usr/bin/evn python  
  2. # coding:utf-8  
  3. import tornado.httpserver  
  4. import tornado.ioloop  
  5. import tornado.options  
  6. import tornado.web  
  7. import tornado.httpclient  
  8.   
  9. import json  
  10.   
  11. from tornado.options import define, options  
  12. define('port',default=9000,help='run on the given port', type=int)  
  13.   
  14. class IndexHandler(tornado.web.RequestHandler):  
  15.     @tornado.web.asynchronous #引用一个异步装饰器  
  16.     def get(self):  
  17.         client = tornado.httpclient.AsyncHTTPClient() #使用异步client  
  18.         client.fetch("http://ip.taobao.com//service/getIpInfo.php?ip=101.254.142.211",callback=self.deal) # 使用回调  
  19.   
  20.     def deal(self, response): #添加一个回调函数  
  21.         body = json.loads(response.body)  
  22.         self.write(body)  
  23.         self.finish() # 关闭链接  
  24.   
  25. if __name__ == "__main__":  
  26.     tornado.options.parse_command_line()  
  27.     app = tornado.web.Application(handlers=[(r'/', IndexHandler)])  
  28.     http_server = tornado.httpserver.HTTPServer(app)  
  29.     http_server.listen(options.port)  
  30.     tornado.ioloop.IOLoop.instance().start()  

> 异步生成器

  1. #!/usr/bin/evn python  
  2. # coding:utf-8  
  3. import tornado.httpserver  
  4. import tornado.ioloop  
  5. import tornado.options  
  6. import tornado.web  
  7. import tornado.httpclient  
  8. import tornado.gen  
  9. import json  
  10.   
  11. from tornado.options import define, options  
  12. define('port',default=9000,help='run on the given port', type=int)  
  13.   
  14. class IndexHandler(tornado.web.RequestHandler):  
  15.     @tornado.web.asynchronous #引用一个异步装饰器  
  16.     @tornado.gen.coroutine  
  17.     def get(self):  
  18.         client = tornado.httpclient.AsyncHTTPClient() #使用异步client  
  19.         response = yield client.fetch("http://ip.taobao.com//service/getIpInfo.php?ip=101.254.142.211")  
  20.   
  21.         body = json.loads(response.body)  
  22.         self.write(body)  
  23.         self.finish() # 关闭链接  
  24.   
  25. if __name__ == "__main__":  
  26.     tornado.options.parse_command_line()  
  27.     app = tornado.web.Application(handlers=[(r'/', IndexHandler)])  
  28.     http_server = tornado.httpserver.HTTPServer(app)  
  29.     http_server.listen(options.port)  
  30.     tornado.ioloop.IOLoop.instance().start()  
» 转载请注明来源:呢喃 » tornado 异步使用

Leave a Reply

Your email address will not be published. Required fields are marked *

twenty + 14 =