初始Tornado异步非阻塞

Tornado  异步非阻塞
from tornado import gen
class MainHandler(tornado.web.RequestHandler):
    @gen.coroutine  #关键点
    def get(self):
    futrue =Future()#关键点
    #阻塞内容,必须写这个格式,time.sleep不好使
    #tornado.ioloop.IOLoop.current().add_timeout(time.time()+10,self.doing) #关键点 self.doing 回调函数
    http = httpclient.AsyncHTTPClient()
    #yield futrue#关键点
    yield http.fetch("http://www.google.com",self.doing)
    def doing(self,*args,**kwargs):#关键点
        self.write('返回内容'
        self.finish())
回调函数执行时间:
超时时间之后执行
http请求消息返回之后执行。
如果future没有做事的时候,这个回调函数永远不执行
因为做事之后会默认执行future.set_result()方法,这个方法执行回调函数
本质上就看这个set_result什么时候执行。
tornado会将这个io操作放到tornado内部的io多路复用中。
检测是否执行完毕,没有则一直执行,框架去执行其他请求。
如果执行完就执行set_result
如果用tronado的异步非阻塞,必须是io请求,不然没有意义。
 
 
 
posted @ 2017-12-15 21:38  铠甲巨人  阅读(198)  评论(0编辑  收藏  举报