tornado异步

tornado.httpclient.AsyncHTTPClient: tornad提供的异步web请求客户端,用来进行异步web请求

fetch(request,callback=None):用于执行一个web请求,并异步响应返回一个tornado.httpclient.HTTPResponse

        request 可以是一个url,也可以是一个tornado.httpclient.HTTPRequest

HTTPRequest:HTTP请求类,该类的构造函数可以接收参数

        url: 要访问的网址,字符串类型

        method: HTTP请求方式, 字符串类型

        headers: 附加的协议头,字典或者HTTPHeaders

        body: HTTP请求体

HTTPResponse:HTTP响应类

        code:  状态码

        reason: 状态码描述

        body: 响应数据

        error: 异常

tornado异步请求(连接数据库等耗时操作):第一种协程方法1

装饰器:@tornado.gen.coroutine:协程异步请求装饰器

              @tornado.web.asynchronous:异步请求装饰器

class Students3Handler(RequestHandler):
    @tornado.gen.coroutine
    def get(self, *args, **kwargs):
        res = yield self.getData()
        self.redirect(res["ret"])
    @tornado.gen.coroutine
    def getData(self):
        url = "http://www.baidu.com"
        client = AsyncHTTPClient()
        res = yield client.fetch(url)
        if res.error:
            ret = {"ret": 0}
        else:
            ret = {"ret":url}

        raise tornado.gen.Return(ret)

第一种协程方法2

@tornado.gen.coroutine
def get(self, *args, **kwargs):
    url = r"http://www.baidu.com"
    client = AsyncHTTPClient()
    res = yield client.fetch(url)
    if res.error:
        self.send_error(500)
    else:
        self.redirect(url)

第二种回调函数:

class StudentsHandler(RequestHandler):
    def on_response(self,response):
        if response.error:
            self.send_error(500)
        else:
            self.render("www.baidu.com")
    @tornado.web.asynchronous
    def get(self, *args, **kwargs):
        client = AsyncHTTPClient()
        url = r"www.baidu.com"
        client.fetch(url,callback=self.on_response)
        self.write("ok")



猜你喜欢

转载自blog.csdn.net/huolan__34/article/details/80819885