python - Couchbase 的 Twisted API 不适用于 Python Tornado

标签 python asynchronous tornado couchbase n1ql

我正在尝试使用 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/

相关文章:

python - 在 scipy 稀疏 csr_matrix 中找到 n 个随机零元素

python - 如何在pandas数据框中使用groupby获取列列表的平均值?

python - 使用 Tornado 和 SUDS 的异步 SOAP 调用

python - 如何在本地运行 Tornado Web 服务器?

python - 值错误 : RRULE UNTIL values must be specified in UTC when DTSTART is timezone-aware

python re invalid group reference\10\2

javascript - 无法理解回调在 Connect 模块中的作用

Python Tornado : Sending websocket messages from another class

Android异步任务与否

c++ - 在C++中收到输入时如何停止执行异步功能