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() called twice
可能是没有@asynchronous装饰器使用异步操作导致的。
最佳答案
可能是因为你在调用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()
关于python - Tornado redis错误: "finish() called twice",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19712183/