簡體   English   中英

龍卷風adbapi回調未運行

[英]Tornado adbapi callback not running

恐怕我發現很難為扭曲的sqlite3 ConnectionPool使用adbapi接口。

我已經在名為db.py的文件中像這樣初始化了池:

from twisted.enterprise import adbapi 

pool = adbapi.ConnectionPool("sqlite3", db=config.db_file)
pool.start()


def last(datatype, n):
    cmd = "SELECT * FROM %s ORDER BY Timestamp DESC LIMIT %i" % (datatype, n)
    return pool.runQuery(cmd)

然后,我導入db.py並在特定的路由處理程序中使用它。 不幸的是,似乎從未觸發過回調。 datatype已打印,但從未打印response

class DataHandler(tornado.web.RequestHandler):

    @tornado.web.asynchronous
    def get(self, datatype):
        print datatype
        data = db.last(datatype, 500)
        data.addCallback(self.on_response)

    def on_response(self, response):
        print response
        self.write(json.dumps(response))
        self.finish()

有任何想法嗎?

混合龍卷風和扭曲需要特別注意。 嘗試此操作,因為在整個程序中執行的第一行:

import tornado.platform.twisted
tornado.platform.twisted.install()

然后,啟動服務器:

tornado.ioloop.IOLoop.current().start()

現在發生的是,您啟動了Tornado IOLoop,但從未啟動過Twisted Reactor。 運行查詢時,您的Twisted SQLite連接開始IO操作,但是由於Reactor沒有運行,因此該操作永遠不會完成。 為了使IOLoop和Reactor共享您的進程,必須在其中一個之上運行它們。 龍卷風提供了一個兼容層,使您可以做到這一點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM