龙卷风redis错误:“finish()调用两次”

时间:2013-10-31 16:43:54

标签: python redis tornado long-polling

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

以上代码提出:

  

RuntimeError:finish()调用两次

可能是因为没有@asynchronous装饰器而使用异步操作。

1 个答案:

答案 0 :(得分:3)

这可能是因为您在拨打self.finish()时没有取消订阅/断开与Redis的连接,因此当另一条消息到达时,再次调用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()