tornado coroutine使用

工作中想在tornado里面封装个异步发送http请求的公共方法,代码如下:

@tornado.gen.engine
def asyn_send_http_req(reqUrl, parm):
        try:
            client = tornado.httpclient.AsyncHTTPClient()
            httpReq = tornado.httpclient.HTTPRequest(reqUrl,method="POST",body=parm,connect_timeout=3)
            response = yield tornado.gen.Task(client.fetch,httpReq)
            response = response.body
            logging.info(response)
        except Exception:
            response = None
        if response and response.strip():
            pass
        else:
            response = None
	    yield response
response = asyn_send_http_req(reqUrl,parm)
获取响应总是报错,后来查了下资料,原来是generator里面不能return。需要使用tornado的 
tornado.gen.Task 来返回响应,代码如下:
 
@tornado.gen.engine
def asyn_send_http_req(reqUrl, parm,callback=None):
        try:
            client = tornado.httpclient.AsyncHTTPClient()
            httpReq = tornado.httpclient.HTTPRequest(reqUrl,method="POST",body=parm,connect_timeout=3)
            response = yield tornado.gen.Task(client.fetch,httpReq)
            response = response.body
            logging.info(response)
        except Exception:
            response = None
        if response and response.strip():
            pass
        else:
            response = None
        callback(response)
response = yield tornado.gen.Task(asyn_send_http_req,reqUrl,parm)
使用callback返回响应。
@tornado.gen.engine 是3.0 版本前使用,现在不建议使用,3.0后使用@tornado.gen.coroutine替代。
@tornado.gen.coroutine
def asyn_send_http_req(reqUrl, parm):
        try:
            client = tornado.httpclient.AsyncHTTPClient()
            httpReq = tornado.httpclient.HTTPRequest(reqUrl,method="POST",body=parm,connect_timeout=3)
            response = yield tornado.gen.Task(client.fetch,httpReq)
            response = response.body
            logging.info(response)
        except Exception:
            response = None
        if response and response.strip():
            pass
        else:
            response = None
        raise gen.Return(response)
同时使用gen.Return()方法返回响应。
OK,问题解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值