La API torcida para Couchbase no funciona con Python Tornado

Estoy intentando ejecutar un servidor Tornado con Couchbase 4.0 Developer preview.

import tornado.web import tornado.httpserver import tornado.options import tornado.ioloop import tornado.websocket import tornado.httpclient from tornado import gen import os.path from tornado.options import define, options, parse_command_line import time #from couchbase.bucket import Bucket from twisted.internet import reactor from txcouchbase.bucket import Bucket from couchbase.n1ql import N1QLQuery, N1QLError from pprint import pprint server = "xxxx" bucketname = "zips" Connection = "couchbase://" + server + "/" + bucketname bkt = Bucket(Connection) class IndexHandler(tornado.web.RequestHandler): @tornado.web.asynchronous def get(self): print "entered" query = "SELECT * FROM `zips` where pincode= '632014'" q = N1QLQuery(query) #self.bkt = bkt t0 = time.time() res = bkt.n1qlQueryAll(q) res.addCallback(self.on_ok) reactor.run() t1 = time.time() print t1-t0 self.write("Hello World") def on_ok(self,response): print "LOl" for each in res: print each reactor.stop() self.finish() handlers = [ (r'/',IndexHandler), ] if __name__ == "__main__": parse_command_line() # template path should be given here only unlike handlers app = tornado.web.Application(handlers, template_path=os.path.join(os.path.dirname(__file__), "templates"), static_path=os.path.join(os.path.dirname(__file__), "static"), cookie_secret="61oETzKXQAGaYdkL5gEmGeJJFuYh7EQnp2XdTP1o/Vo=", debug=True) http_server = tornado.httpserver.HTTPServer(app) http_server.listen(8888, address='0.0.0.0') tornado.ioloop.IOLoop.instance().start() 

Después de ejecutar esto, por alguna razón, nunca se llama a la función de callback. No pude encontrar ninguna documentación adecuada para esto, y tuve que revisar el código fuente para escribir esto. Todavía estoy confundido ya que soy nuevo en la progtwigción asíncrona. ¿Alguien, por favor, puede decirme dónde me voy mal y si hay una mejor manera de hacerlo?

En la progtwigción asíncrona, solo desea iniciar un bucle de eventos (como IOLoop.start() o reactor.run() ) una vez, en la parte superior de su progtwig. Estás llamando a IOLoop.start() , así que en lugar de llamar a reactor.run() quieres decirle a Twisted que use el Tornado IOLoop como su reactor. Antes de la importación de reactor , hacer

 import tornado.platform.twisted tornado.platform.twisted.install() from twisted.internet import reactor 

Consulte http://www.tornadoweb.org/en/stable/twisted.html#twisted-on-tornado para obtener más información.

Una vez que haya hecho esto, puede llamar bibliotecas retorcidas sin tener que iniciar y detener el reactor.