Hello. Problem solved! It was a false alarm. My Firefox simply serializes all requests to one domain. (BTW Chrome does that too.) This is strange however, because I have more connections enabled in Firefox about:config (network.http.* and friends). Have anyone of you solved this?
Thank you and sorry for the noise, Ladislav Lenart On 11.6.2013 09:08, Ladislav Lenart wrote: > Hello. > > > On 10.6.2013 18:41, Michael Bayer wrote: >> >> On Jun 10, 2013, at 11:46 AM, Ladislav Lenart <lenart...@volny.cz> wrote: >> >>> >>> I have no idea what is wrong. Please help me diagnose this! Note that OS >>> monitor >>> shows several cherrypy threads, each gets its share, so the cherrypy setup >>> seems >>> to be OK. >>> class _SessionContext(object): >>> def __init__(self): >>> self._level = 0 >>> >>> def __enter__(self): >>> if self._level == 0: >>> self._session = _Session() >>> self._level += 1 >>> return self._session >>> >>> def __exit__(self, type_, value, traceback): >>> self._level -= 1 >>> if self._level == 0: >>> self._session.close() >>> self._session = None >>> >>> _thread_local = local() >>> >>> def get_session(): >>> ctx = getattr(_thread_local, 'session_context', None) >>> if ctx: >>> return ctx >>> ctx = _SessionContext() >>> _thread_local.session_context = ctx >>> return ctx >> >> >> what's all this thread local stuff for? The problem is likely there, a >> scoped_session() already uses a threading.local. A very simple usage >> pattern should work fine. Just put a "session.remove()" type of thing to >> occur at the end of each request. guidelines are here: >> http://docs.sqlalchemy.org/en/rel_0_8/orm/session.html#using-thread-local-scope-with-web-applications >> > > Well, this is our way to call Session.remove() at the end of the request > processing. > > get_session() creates _SessionContext instance (a python context manager) > responsible for closing the session at the end. We use scoped_session() and we > wanted to support nesting like this: > > with get_session(): > with get_session(): > ... > > Hence we create only one _SessionContext per thread. It increments its > internal > counter whenever its __enter__() is called and decrements it whenever its > __exit__() is called. It closes the session when the counter reaches zero. > > The decorator @session.use wraps the function in the call > > with get_session(): > > We mark every method of our handler that needs to access a database with this > decorator. It is always the top level decorator, i.e.: > > @session.use > @other_decorator > def foo(): > pass > > I will investigate further and let you know. > > > Thank you, > > Ladislav Lenart -- 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.