All,
Here is the pattern I have adopted for putting long-running queries
into a thread, to avoid blocking the entire application. I'm using
twisted's deferToThread().
def runInThread(fun, *args, **kwargs):
opts = schema.default_engine.engine.opts
dbname = schema.default_engine.engine.name
echo = schema.default_engine.engine.echo
d = threads.deferToThread(_runInThread, dbname, opts, echo, fun,
*args, **kwargs)
return d
def _runInThread(dbname, opts, echo, fun, *args, **kwargs):
global_connect(dbname, opts, echo=echo)
return fun(*args, **kwargs)
....
d = runInThread(Person.mapper.select)
d = runInThread(Person.mapper.select_by, person.c.age >= 21)
Basically, runInThread runs in the main thread context. It pulls the
db connection parameters out and passes them to _runInThread (which
runs in a thread). I'm doing this because as I understand it, each
thread has it's own connection. Of course, I get deferred objects
back from runInThread, so the surrounding code has to deal with that...
I just want to make sure my pattern above is sound. Is there an
easier way to handle multiple threads connection to the same db, or
something I've overlooked?
--
Dimi Shahbaz, Software Engineer Specialist
California PASS Program
www.cyberhigh.fcoe.k12.ca.us
-------------------------------------------------------
Using Tomcat but need to do more? Need to support web services, security?
Get stuff done quickly with pre-integrated technology to make your job easier
Download IBM WebSphere Application Server v.1.0.1 based on Apache Geronimo
http://sel.as-us.falkag.net/sel?cmd=lnk&kid=120709&bid=263057&dat=121642
_______________________________________________
Sqlalchemy-users mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sqlalchemy-users