The AsyncDistributedConnection class allows applications to execute multiple SQL statements asynchronously across multiple database shards. The method
execute()
accepts multiple SQL statements and arguments or parameters. An AsyncDistributedConnection instance is created by calling theexdb.connect()
method with argumentsnodes
,async=True
and an optional argumentnWorkers
to specify the number of separate processes to execute the statements. For example:nodes = ("localhost:5001", "localhost:5002") conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=2)The connection can now be used to execute single queries which return a single result set , or SQL
insert
,update
ordelete
statements which return the number of rows affected.Or the connection can execute multiple statements asynchronously in parallel to produce multiple result sets.
For example, the following code snippet demonstrates using an AsyncDistributedConnection to execute single SQL queries:
nodes = ("localhost:5001", "localhost:5002") conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=2) r = conn.execute("SELECT 1,2") print "len(r)=", len(r) for k in range(len(r)): pprint.pprint(r[k]) r = conn.execute("SELECT 1,2,?", (3, )) print "len(r)=", len(r) for k in range(len(r)): pprint.pprint(r[k])The following code snippet demonstrates using an AsyncDistributedConnection to execute multiple SQL statements asynchronously:
nodes = ("localhost:5001", "localhost:5002") nWorkers = 2 conn = self.exdb.connect(nodes=nodes, async=True, nWorkers=nWorkers) q = ["INSERT INTO MyTable(pk, value, u2, i1, i2, i4, i8, flt, dbl) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)"] * nWorkers args = [] for i in xrange(nWorkers): args.append((i*100, 'str%s' % i, i, i, i, i, i, i*100, i*100.9)) r = conn.execute(q, args) print "len(r)=", len(r) for k in range(len(r)): pprint.pprint(r[k]) q = [ "SELECT COUNT(*) FROM MyTable", "SELECT SUM(pk) FROM MyTable", "SELECT SUM(i1) FROM MyTable", "SELECT SUM(i2) FROM MyTable" ] r = conn.execute(q, None) print "len(r)=", len(r) for k in range(len(r)): pprint.pprint(r[k])