2013-10-31 13 views
0
class RedisHandler(BaseHandler): 
@tornado.web.authenticated 
@tornado.web.asynchronous 
@tornado.gen.engine 
def post(self): 
    self.client = tornadoredis.Client() 
    self.client.connect() 
    yield tornado.gen.Task(self.client.subscribe,'notification') 
    self.client.listen(self.on_message) 

def on_message(self,msg): 
    if msg.kind == 'message': 
     self.finish(dict(complete=True,message=msg.body)) 
    return 

上面的代碼引發:龍捲風redis的錯誤:「完成()調用兩次」

RuntimeError: finish() called twice

它可以通過使用異步操作,而不在@Asynchronous裝飾引起。

回答

3

這可能是因爲你沒有退訂/從Redis的斷開,當你調用self.finish(),等另一個郵件到達時,on_message()又被稱爲:

def on_message(self,msg): 
    if msg.kind == 'message': 

     self.finish(dict(complete=True,message=msg.body)) 

     self.client.unsubscribe('notification') 
     self.client.disconnect() 
+0

它的工作謝謝 –