我正在尝试使用 Couchbase 4.0 开发者预览版运行 Tornado 服务器。
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 = "x.x.x.x"
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()
在我运行它之后,由于某种原因从未调用回调函数。我找不到任何合适的文档,必须通过源代码来编写它。我仍然很困惑,因为我是异步编程的新手。有人可以告诉我哪里出错了,是否有更好的方法?
最佳答案
在异步编程中,您只想在您的程序顶部启动一次事件循环(如 IOLoop.start()
或 reactor.run()
)程序。您正在调用 IOLoop.start()
,因此您想告诉 Twisted 使用 Tornado IOLoop 作为其 react 器,而不是调用 reactor.run()
。在导入reactor
之前,做
import tornado.platform.twisted
tornado.platform.twisted.install()
from twisted.internet import reactor
参见 http://www.tornadoweb.org/en/stable/twisted.html#twisted-on-tornado了解更多。
完成此操作后,您可以调用扭曲库而无需启动和停止 react 器。
关于python - Couchbase 的 Twisted API 不适用于 Python Tornado,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31437022/