Twisted API for Couchbase 无法与 Python Tornado 一起使用
Twisted API for Couchbase not working with Python Tornado
我正在尝试 运行 带有 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 作为其反应器,而不是调用 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。
完成此操作后,您可以调用扭曲库而无需启动和停止反应器。
我正在尝试 运行 带有 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 作为其反应器,而不是调用 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。
完成此操作后,您可以调用扭曲库而无需启动和停止反应器。