tornado @gen.coroutine无法实现异步

本文共有1339个字,关键词:

问题:使用tornado的@gen.coroutine进行装饰,无法实现异步的功能

解决:time.sleep()是阻止异步的,可以使用gen.sleep()代替实现

方法:

取消time.sleep()的使用

代码如下:

class ApiFocusCheckingHandler(BaseHandler):
    # @gen.coroutine
    # def post(self):
    #     sec_count = 5
    #     yield self.process_count(sec_count)
    #     self.write({'code': 'ok'})
    # @gen.coroutine
    # def process_count(self, num):
    #     yield
    #     while num:
    #         time.sleep(1)   # 换成gen.sleep(1)就可实现异步了
    #         num -= 1
    #     raise gen.Return(None)

    # 上面的代码是无法实现异步的,是阻塞的
    @gen.coroutine
    def post(self):
        resp = yield self.GetUser()
        self.write(resp)

    @gen.coroutine
    def GetUser(self):
        client = httpclient.AsyncHTTPClient()
        resp = yield client.fetch("https://www.github.com")
        if resp.code == 200:
            resp = resp.body
        else:
            resp = {"message": "fetch client error"}
            logger.error("client fetch error %d, %s" % (resp.code, resp.message))
        raise gen.Return(resp)

注:本人使用的是redis + rq + gen.coroutine实现异步处理的
参考:

https://blog.csdn.net/u013038616/article/details/72821600
版权声明:本文为作者原创,如需转载须联系作者本人同意,未经作者本人同意不得擅自转载。
添加新评论
暂无评论