在龙卷风中,如何使这些功能异步?

时间:2015-12-03 03:46:06

标签: python tornado

这是我的代码:

#/test
class Test(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def get(self):
        res = yield self.inner()
        self.write(res)

    @tornado.gen.coroutine
    def inner(self):
        import time
        time.sleep(15)
        raise tornado.gen.Return('hello')

#/test_1
class Test1(tornado.web.RequestHandler):
    @tornado.web.asynchronous
    @tornado.gen.coroutine
    def get(self):
        res = yield self.inner()
        self.write(res)

    @tornado.gen.coroutine
    def inner(self):
        raise tornado.gen.Return('hello test1')

当我获取/测试然后获取/ test_1,但是/ test_1在/ test响应之前没有响应,如何修复它?

2 个答案:

答案 0 :(得分:2)

不要使用time.sleep()time.sleep()将阻止cpu循环。相反,使用

yield tornado.gen.Task(tornado.ioloop.IOLoop.instance().add_timeout,
                               time.time() + sleep_seconds)

答案 1 :(得分:0)

你遇到了两个常见问题:

http://www.tornadoweb.org/en/stable/faq.html

首先,请不要在Tornado应用程序中使用time.sleep(),而是使用gen.sleep()。其次,请注意大多数浏览器不会同时从同一个域中获取两个页面:使用“curl”或“wget”来测试您的应用程序。