Hi,
I've been trying to debug an issue i've been having with pylons in
mod_wsgi running with multiple threads and processes in daemon mode
and I've come to a point where I think my scoped_session's are
possibly being shared across threads. At least thats the only
explanation I can find, barring postgres being broken.
Problem:
So, I have a query that does a postgres style Select with lockmode
update in sqlalchemy, it then modifies the data, creates a new
sqlalchemy object, adds it to the session and commits it. Quite
frequently it looks like no locking occured at all. Ie, the new
sqlalchemy object (insert) is a history record of what happened and I
can see that two, in some cases 3 or even 4 history records have the
same data.
Setup:
The sqlalchemy model uses reflection, and therefore requires
init_environment in environment.py to set up the Session and engine.
init_environenment calls the following method:
def init_model(engine):
"""Call me before using any of the tables or classes in the
model"""
sm = sessionmaker(autoflush=True, autocommit=False, bind=engine)
meta.engine = engine
meta.Session = scoped_session(sm)
My question is, is it possible that meta.Session is somehow not thread
local?
Should a new scoped_session be created for each call in the
BaseController class in __call__?
I know scoped_session is said to be thread safe, so I'm not sure what
I'm doing wrong.
>From the command line when i run multiple paster shell instances, the
postgres with update locks hold.
Am I missing something? Any help would be very welcome.
Thanks,
Damian
--
You received this message because you are subscribed to the Google Groups
"pylons-discuss" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/pylons-discuss?hl=en.