[Twisted-Python] Using sqlalchemy in twisted.

Peter Cai newptcai at gmail.com
Wed Mar 4 04:28:24 MST 2009


Hi, all

I am using sqlalchemy in twisted in my project in the way below.
Defer any database operation so the twisted's main thread won't be
blocked.

And I use scoped_session, so that sessions won't have to be created
again and again.

======================================
class Database()
    def __init__(self, conn_str):
        self.conn_str = conn_str
        self.engine = create_engine(self.conn_str, echo=False)
        self.Session = scoped_session(sessionmaker(bind = self.engine,
             expire_on_commit=False))

    def getObjectById(self, klass, id):
        return threads.deferToThread(self._getObjectById, klass, id)

    def _getObjectById(self, klass, id):
        sess = self.Session()
        return sess.query(klass).get(id)
======================================

The code doesn't work.   When I limit the thread numbers to 1

    reactor.suggestThreadPoolSize(1)

Everything goes fine.  Other wise the server would be blocked and must
be killed by "kill 9 ...".

The result conflicts with my understanding of sqlalchemy.  Since I
don't share any object between threads, there should be no problem!

Ah....  It always have risk to use something you haven't tried
before ....
I think I have no choice but always set thread pool size to 1 ...

-- 
look to the things around you,the immediate world around you, if you are
alive,it will mean something to you ——Paul Strand
-------------- next part --------------
An HTML attachment was scrubbed...
URL: </pipermail/twisted-python/attachments/20090304/45c5639b/attachment.html>


More information about the Twisted-Python mailing list