2014-07-13 71 views
1

這裏是我的代碼:龍捲風異步請求不起作用,我的代碼有什麼問題?

class AsyncTestHandler(BaseHandler): 
    def testTimeOut(self, callback): 
     time.sleep(20) 
     callback("ok") 

    @tornado.web.asynchronous 
    def post(self): 
     user = self.get_current_user() 
     self.testTimeOut(callback=self.respones) 

    def respones(self,msg): 
     self.finish(msg) 

我曾用「@ tornado.web.asynchronous」有回調,但要求是不同步的,怎麼能ID?

+0

的可能重複[如何在龍捲風長輪詢工作?](http://stackoverflow.com/questions/16428231/how-does-long-polling-work-in-tornado) – dano

回答

1

問題是,time.sleep不是異步的,所以睡眠時主循環被阻塞。爲了異步運行同步代碼,您可以使用獨立的工作線程。

class HugeQueryHandler(BaseHandler): 

    executor = tornado.concurrent.futures.ThreadPoolExecutor(5) 

    @tornado.concurrent.run_on_executor 
    def sleep_async(self): 
     time.sleep(20) 
     return 

    @tornado.web.asynchronous 
    @gen.engine 
    def get(self): 
     r = yield self.sleep_async() 
     self.finish()