On Thu, 12 Aug 2010 09:44:04 -0400, Michael Bayer <mike...@zzzcomputing.com> wrote: > > On Aug 12, 2010, at 9:25 AM, Faheem Mitha wrote: > >> >> Hi Mike, >> >> Thanks for the response, but I don't follow. >> >> When you say "multiple threads are hitting the session you have >> above", which session are you referring to? There is more than one >> object above that could be called a session. Ie. > > > I don't actually know, it would require that I have a full install of your > application for me to run and step through with a debugger to fully > understand what it's doing. All I can say from here is that the errors > you have suggest concurrent access to a single psycopg2 connection resource, > and that a single Session references a single connection when in use. A > MetaData object does not, nor does an Engine - only a Session. If you > remove all threading from your application and the errors go away, then you > know you're accessing some resource illegally. > > >> >> Session1 in "Session1 = sessionmaker()" >> session1 in "session1 = Session1(bind=db)" >> Session2 in "Session2 = scoped_session(sessionmaker())" >> >> Let me try to ask a precise question. If I do >> >> Session = scoped_session(sessionmaker()) >> >> then is it ok for this Session object to be be passed around >> between multiple threads and used directly as in >> >> Session.commit() >> >> Does this correspond to a single psycopyg2 connection? If it does, and >> this usage is wrong, should I be creating separate sessions within >> each thread like > > That's a scoped_session, which is threadsafe. Everything you call upon it > will acquire a Session object from a thread local context, and commit() is > called on that (for information on thread locals, see > http://docs.python.org/library/threading.html#threading.local. > > If you pass a scoped_session from one thread to another, and the second > thread calls commit(), the second thread is not affecting the transaction > begun by the first. They are two separate transactions. > > >
-- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.