Concurrent Queries in TornadoΒΆ
The following example issues multiple concurrent queries in a single asynchronous request and will wait until all queries are complete before progressing:
from tornado import gen, ioloop, web
import queries
class RequestHandler(web.RequestHandler):
def initialize(self):
self.session = queries.TornadoSession()
@gen.coroutine
@gen.coroutine
def get(self, *args, **kwargs):
# Issue the three queries and wait for them to finish before progressing
(q1result,
q2result,
q3result) = yield [self.session.query('SELECT * FROM foo'),
self.session.query('SELECT * FROM bar'),
self.session.query('INSERT INTO requests VALUES (%s, %s, %s)',
[self.remote_ip,
self.request_uri,
self.headers.get('User-Agent', '')])]
# Close the connection
self.finish({'q1result': q1result.items(),
'q2result': q2result.items()})
# Free the results and connection locks
q1result.free()
q2result.free()
q3result.free()
if __name__ == "__main__":
application = web.Application([
(r"/", RequestHandler)
]).listen(8888)
ioloop.IOLoop.instance().start()