[英]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.