Hi. I have found some problems with threadlocal strategy and the ResultProxy.
Here is the code that reproduces the problem, Twisted and PostgreSQL are required. I'm using SQLAlchemy 0.3.6-1 from Debian Etch. I don't know if this is a bug of SQLAlchemy. Is the ResultProxy thread safe? #! /usr/bin/env python import sys from twisted.python import log from twisted.internet import defer, threads, reactor import sqlalchemy as sq def callback(result, i): # Is the ResultProxy thread safe? if USE_CURSOR: rows = list(result) log.msg('callback', i) def errback(reason): log.err(reason) def f(): l = [] for i in range(N): log.msg('request', i) d = threads.deferToThread(db.execute, QUERY) d.addCallbacks(callback, errback, callbackArgs=(i,)) l.append(d) return defer.DeferredList(l) def main(): return f().addCallbacks(lambda _: None, lambda r: log.err(r) ).addBoth(lambda _: reactor.stop()) POOL_SIZE = 1 N = 10 QUERY = 'SELECT CURRENT_TIMESTAMP' URL = 'postgres://manlio:[EMAIL PROTECTED]/test' STRATEGY = 'threadlocal' USE_CURSOR = False reactor.suggestThreadPoolSize(POOL_SIZE) db = sq.create_engine(URL, pool_size=POOL_SIZE, strategy=STRATEGY, echo_pool=False) log.startLogging(sys.stdout) reactor.callWhenRunning(main) reactor.run() When USE_CURSOR is False, I got (at random) the error: File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 718, in execute connection = self.contextual_connect(close_with_result=True) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/threadlocal.py", line 148, in contextual_connect return self.session.get_connection(**kwargs) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/threadlocal.py", line 21, in get_connection return TLConnection(self, close_with_result=close_with_result) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/threadlocal.py", line 63, in __init__ base.Connection.__init__(self, session.engine, close_with_result=close_with_result) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 368, in __init__ self.__connection = connection or engine.raw_connection() File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/threadlocal.py", line 127, in raw_connection return self.connection_provider.get_connection() File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/default.py", line 19, in get_connection return self._pool.connect() File "/usr/lib/python2.4/site-packages/sqlalchemy/pool.py", line 150, in connect return self._threadconns[thread.get_ident()].connfairy().checkout() exceptions.AttributeError: 'NoneType' object has no attribute 'checkout' When USE_CURSOR is True, I obtain (at random) any of these two errors: File "./concurrency.twisted.py", line 12, in callback rows = list(result) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 921, in __iter__ row = self.fetchone() File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 997, in fetchone self.close() File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 862, in close self.cursor.close() File "/usr/lib/python2.4/site-packages/sqlalchemy/pool.py", line 312, in close if self in self.__parent._cursors: exceptions.TypeError: iterable argument required and: File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 719, in execute return connection.execute(statement, *multiparams, **params) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 444, in execute return Connection.executors[c](self, object, *multiparams, **params) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 458, in execute_text cursor = self._execute_raw(statement, parameters) File "/usr/lib/python2.4/site-packages/sqlalchemy/engine/base.py", line 540, in _execute_raw cursor = self.__engine.dialect.create_cursor(self.connection) File "/usr/lib/python2.4/site-packages/sqlalchemy/databases/postgres.py", line 277, in create_cursor return connection.cursor() File "/usr/lib/python2.4/site-packages/sqlalchemy/pool.py", line 253, in cursor self.invalidate() File "/usr/lib/python2.4/site-packages/sqlalchemy/pool.py", line 243, in invalidate raise exceptions.InvalidRequestError("This connection is closed") sqlalchemy.exceptions.InvalidRequestError: This connection is closed Thanks and regards Manlio Perillo --~--~---------~--~----~------------~-------~--~----~ You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalchemy@googlegroups.com To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en -~----------~----~----~----~------~----~------~--~---