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.

Reply via email to