我正在使用Tornado和Postgres,我有一些查询(4或5),我在程序中附加到列表中,现在我想一次执行所有这些查询!
当我尝试执行时出现错误:
"DummyFuture does not support blocking for results"
我执行了这段代码:
yield self.db.execute(''.join(queries)).result()
“查询”是查询列表!
这是我的连接池和Tonado设置:
ioloop = IOLoop.instance()
application.db = momoko.Pool(
dsn='dbname=xxx user=xxx password=xxxx host=x port=xxxx'
size=xx,
ioloop=ioloop,
)
# this is a one way to run ioloop in sync
future = application.db.connect()
ioloop.add_future(future, lambda f: ioloop.stop())
ioloop.start()
future.result() # raises exception on connection error
http_server = HTTPServer(application)
http_server.listen(8888, 'localhost')
ioloop.start()
答案 0 :(得分:0)
不要在Tornado协程中的Future上调用result()
。得到这样的结果:
@gen.coroutine
def method(self):
result = yield self.db.execute('...')
另外,我认为将查询作为字符串加入并不起作用。结果将不是有效的SQL。代替:
@gen.coroutine
def method(self):
results = yield [self.db.execute(q) for q in queries]