gpt4 book ai didi

python - Tornado adbapi 回调未运行

转载 作者:行者123 更新时间:2023-12-01 05:21:14 24 4
gpt4 key购买 nike

恐怕我发现在twisted中使用sqlite3 ConnectionPools的adbapi接口(interface)很困难。

我已经在名为 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()

有什么想法吗?

最佳答案

混合 Tornado 和 Twisted 需要特别注意。试试这个,作为整个程序中执行的第一行:

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

然后,启动您的服务器:

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

现在发生的情况是,您启动了 Tornado IOLoop,但从未启动过 Twisted Reactor。当您运行查询时,您的 Twisted SQLite 连接开始 IO 操作,但由于 Reactor 未运行,因此该操作永远不会完成。为了让 IOLoop 和 Reactor 共享您的进程,您必须在其中一个之上运行其中一个。 Tornado 提供了一个兼容性层,允许您做到这一点。

关于python - Tornado adbapi 回调未运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22309183/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com