当我收到来自客户端的消息时,我想并行运行多个 RethinkDB 查询并立即将结果发送给客户端。
阻塞方式如下。计数可能需要几分钟。我希望其他可以更快返回的查询不会被计数查询所阻碍。
self.write_message({'count': r.db('public').table(message['table']).count().run(conn)})
self.write_message({'rows': r.db('public').table(message['table']).limit(10).run(conn)})
我怀疑我需要https://rethinkdb.com/blog/async-drivers/和http://www.tornadoweb.org/en/stable/guide/async.html的组合
我在想也许答案是让这两行类似于:
ioloop.IOLoop.current().add_callback(run_query, r.db('public').table(message['table']).count(), 'count', self)
ioloop.IOLoop.current().add_callback(run_query, r.db('public').table(message['table']).limit(10), 'rows', self)
我的运行查询将是:
@gen.coroutine
def run_query(query, key, ws):
conn = yield r.connect(host="localhost", port=28015)
results = yield query.run(conn)
ws.write_message({key: results})