On Jun 12, 2013, at 2:47 PM, writes_on <doug.farr...@gmail.com> wrote:
> I'm building a Twisted application in Python 2.7 and am trying to use > SqlAlchemy to interact with the database. I've got a working application that > is leaking memory, and am not sure how to find the leaks. As a "maybe this is > the problem" I'm asking if how I'm using SqlAlchemy might be the source of > the leaks. I've written a decorator to create the sessions I use to interact > with the database. The decorator is wrapped around a function that accepts > the session as a parameter and is called in a thread like this: > > @inlineCallbacks > def update_db(data) > @db_scoped_session > def process(session): > # do SqlAlchemy work here > > # call process in thread > result = yield threads.deferToThread(process) > defer.returnValue(result) > where process is the function wrapped by the decorator. Here is my decorator > code that is creating the session: > > def db_scoped_session(engine, auto_commit=True): > def decorator(func): > @functools.wraps(func) > def wrapper(*args, **kwargs): > results = None > db_sessionmaker = > scoped_session(sessionmaker(expire_on_commit=True, bind=engine)) > db_session = db_sessionmaker() > try: > results = func(db_session, *args, **kwargs) > # should we rollback for safety? > if not auto_commit: > db_session.rollback() > except: > db_session.rollback() > raise > finally: > db_session.commit() > return results > return wrapper > return decorator > > Does anyone see anything wrong with what I'm doing here? from my understanding, you definitely can't use an out-of-the-box scoped_session with Twisted, as Twisted doesn't have a simple mapping of work to be done with threads. A scoped_session() uses thread locals. But I'm not deeply familiar with the mechanics of defer_to_thread in this regard. -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To unsubscribe from this group and stop receiving emails from it, send an email to sqlalchemy+unsubscr...@googlegroups.com. To post to this group, send email to sqlalchemy@googlegroups.com. Visit this group at http://groups.google.com/group/sqlalchemy?hl=en. For more options, visit https://groups.google.com/groups/opt_out.