2013-10-31 32 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

它的工作谢谢 –