我正在使用龙卷风和龙卷风redis但我无法在没有错误的情况下关闭与redis的连接 . 看看这个例子:

import tornadoredis    
import tornado.web    
import tornado.gen    

client = tornadoredis.Client()    
client.connect()    

class MainHandler(tornado.web.RequestHandler):    
    @tornado.web.asynchronous    
    @tornado.gen.engine    
    def get(self):    
        client.publish('test_channel', 'ahahah')    
        self.finish('Ok')    

class ListenerHandler(tornado.web.RequestHandler):    
    @tornado.web.asynchronous     
    @tornado.gen.engine     
    def get(self):    
        self.client = tornadoredis.Client()    
        self.client.connect()    
        yield tornado.gen.Task(self.client.subscribe, 'test_channel')    
        self.client.listen(self.from_redis)    

    def from_redis(self, msg):    
        print msg.kind               
        if msg.kind == 'message':         
            self.write(str(msg.body))    
            self.aaaa()                   
        if msg.kind == 'disconnect':     
            self.write('Redis error')    
            self.aaaa()                   

    def aaaa(self):                                     
        print('aaaa')                                   
        self.finish()
        if self.client.subscribed:                     
            self.client.unsubscribe('test_channel')                            
            self.client.disconnect()                                           

def main():                               
    app = tornado.web.Application([       
        (r"/", MainHandler),                    
        (r"/listen", ListenerHandler),          
    ])                                          
    app.listen(9898)                            
    tornado.ioloop.IOLoop.instance().start()    

if __name__ == "__main__":                                                                           
    main()

并从命令行测试:

curl "http://yourip:9898/listen" &
curl "http://yourip:9898/"

除了在调用“self.client.disconnect()”时返回以下错误,所有工作正常:

Traceback(最近一次调用最后一次):文件“/usr/local/lib/python2.7/dist-packages/tornado/web.py”,第1115行,在_stack_context_handle_exception raise_exc_info((类型,值,追溯))文件“ /usr/local/lib/python2.7/dist-packages/tornado/stack_context.py“,第302行,包裹的ret = fn(* args,** kwargs)文件”/usr/local/lib/python2.7 /dist-packages/tornado/gen.py“,第550行,在内部self.set_result(键,结果)文件”/usr/local/lib/python2.7/dist-packages/tornado/gen.py“,行476,在set_result中self.run()文件“/usr/local/lib/python2.7/dist-packages/tornado/gen.py”,第505行,在run yielded = self.gen.throw(* exc_info)文件“/usr/local/lib/python2.7/dist-packages/tornadoredis/client.py”,第1070行,在listen数据中= yield gen.Task(self.connection.readline)文件“/ usr / local / lib / python2.7 / dist-packages / tornado / gen.py“,第533行,运行self.yield_point.start(self)文件”/usr/local/lib/python2.7/dist-packages/tornado/gen.py “,第371行,在start self.func(* self.args,** self.kwargs)文件”/ u sr / local / lib / python2.7 / dist-packages / tornadoredis / connection.py“,第154行,在readline中引发ConnectionError('试图读取'ConnectionError:试图从不存在的连接读取

您是否有任何建议以干净正确的方式关闭redis的连接?