1. Synchronous request
Import Tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webImport Tornado.httpclientImport urllibimport jsonimport datetimeimport timefrom tornado.options Import define, Optionsdefine ("Port", default= 8000, help= "run on the given port", Type=int) class Indexhandler (Tornado.web.RequestHandler): Def get (self): Quer y = self.get_argument (' q ')client = tornado.httpclient.HTTPClient () response = Client.fetch ("Http://search.twitter.com/search.json?" + Urllib.urlencode ({"Q": Query, "ResU Lt_type ":" Recent "," RPP ": +)) BODY = Json.loads (response.body) Result_count = Len (body[' results ')) now = Datetime.datetime.utcnow () raw_oldest_tweet_at = body[' res Ults '][-1][' created_at '] oldest_tweet_at = Datetime.datetime.strptime (Raw_oldest_tweet_at, "%a,%d% b%Y%h:%m:%s +0000 ") Seconds_diff = Time.mktime (Now.timetuple ())-Time.mktime (Oldest_tweet_at.tim Etuple ()) Tweets_per_second = float (result_count)/Seconds_diff Self.write ("" "<div style=" Text-align:ce Nter "> <div style=" font-size:72px ">%s</div> <div style=" font-size:144px ">%.02f</div> <div style= "font-size:24px" >tweets per second</div></div> "" "% (query, Tweets_per_second)) if __name __ = = "__main__": Tornado.options.parse_command_line () app = Tornado.web.Application (handlers=[(r "/", Indexhandler)] ) Http_server = Tornado.httpserver.HTTPServer (APP) Http_server.listen (Options.port) Tornado.ioloop.IOLoop.instanc E (). Start ()
2. Asynchronous request with callback function
Import Tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webImport Tornado.httpclientImport urllibimport jsonimport datetimeimport timefrom tornado.options Import define, Optionsdefine ("Port", default= 8000, help= "run on the given port", Type=int) class Indexhandler (Tornado.web.RequestHandler):@tornado. web.asynchronous #保证在函数返回后, the connection does not close immediately, and the connection is closed manually after the asynchronous processing is completeddef get (self): query = self.get_argument (' q ')client = Tornado.httpclient.AsyncHTTPClient () client.fetch ("Http://search.twitter.com/search.json?" + Urllib.urlencode ({"Q": Query, "result_type": "Recent", "RPP": +}), Callback=self.on_response) #设置response返回后的回调函数def on_response (self, response): BODY = json.loads (response.body) Result_count = Len (body[' results ']) now = Datetime.datetime.utcnow () Raw_oldest_tweet_at = body[' results '][-1][' created_at '] oldest_tweet_at = Datetime.datetime.strptime (Raw_oldest_tweet_at, "%a,%d%b%Y%h:%m:%s +0000") Seconds_diff = TIME.M Ktime (Now.timetuple ())-Time.mktime (Oldest_tweet_at.timetuple ()) Tweets_per_second = float (result_ count)/Seconds_diff Self.write ("" "<div style=" Text-align:center "> <div style=" font-size:72px ">%s </div> <div style= "font-size:144px" >%.02f</div> <div style= "font-size:24px" >tweets per sec Ond</div></div> "" "% (self.get_argument (' Q '), Tweets_per_second))self.finish () #手动关闭连接if __name__ = = "__main__": Tornado.options.parse_command_line () app = Tornado.web.Application (handlers=[(r "/", Index Handler)]) Http_server = tornado.httpserver.HTTPServer (APP) Http_server.listen (Options.port) Tornado.ioloop.IOLoo P.instance (). Start ()
3. Asynchronous request with asynchronous generator method
Import Tornado.httpserverimport tornado.ioloopimport tornado.optionsimport tornado.webImport Tornado.httpclientimport Tornado.genImport urllibimport jsonimport datetimeimport timefrom tornado.options Import define, Optionsdefine ("Port", default= 8000, help= "run on the given port", Type=int) class Indexhandler (Tornado.web.RequestHandler):@tornado. web.asynchronous @tornado. Gen.enginedef get (self): query = self.get_argument (' q ')client = tornado.httpclient.AsyncHTTPClient () response = yield Tornado.gen.Task (client. Fetch, "Http://search.twitter.com/search.json" + urllib.urlencode ({"Q": Query, "Result_typ E ":" Recent "," RPP ":)) BODY = json.loads (response.body) Result_count = Len (body[' results ']) now = Datetime.datetime.utcnow () Raw_oldest_tweet_at = body[' results '][-1][' created_at '] oldest_tweet_at = Datetime.datetime.strptime (raw_oldest_tw Eet_at, "%a,%d%b%Y%h:%m:%s +0000") Seconds_diff = Time.mktime (Now.timetuple ())- Time.mktime (Oldest_tweet_at.timetuple ()) Tweets_per_second = float (result_count)/Seconds_diff Self.write ( "" "<div style=" Text-align:center "> <div style=" font-size:72px ">%s</div> <div style=" font-size : 144px ">%.02f</div> <div style=" font-size:24px ">tweets per second</div></div>" ""% (query , Tweets_per_second))self.finish ()if __name__ = = "__main__": Tornado.options.parse_command_line () app = Tornado.web.Application (handlers=[(r "/", Index Handler)]) Http_server = tornado.httpserver.HTTPServer (APP) Http_server.listen (Options.port) Tornado.ioloop.IOLoo P.instance (). Start ()
Tornado Series IV: Web Requests