In general I strongly urge you to reconsider using subrequests... they are there for people to use but they have lots of drawbacks versus just calling a bunch of reusable functions.
Anyway, this is how subrequests work - they are isolated. They do have an odd feature that sort of lets you merge them with the current request by setting use_tweens=False, from there you could copy request.tm and request.dbsession to the new request and then it'd be using the same pyramid_tm and dbsession which is one step closer to thinking of your sub-views as part of the same top-level request context. - Michael On Thu, Apr 26, 2018 at 8:55 AM, <[email protected]> wrote: > Hello, > > Perhaps this forum is more appropriate to ask than the SQLAlchemy group > (see this same question over there > <https://groups.google.com/forum/#!topic/sqlalchemy/jZY2X5Rjjlk>). > > I would like to understand the interplay between a SQLA session and a > Pyramid’s subrequest > <https://docs.pylonsproject.org/projects/pyramid/en/latest/narr/subrequest.html>. > When a request is handled, a new session is created for that request as per > the Pyramid/SQLA cookiecutter > <https://github.com/Pylons/pyramid-cookiecutter-alchemy>, and it looks to > me like subrequests create a new session too. > > When I set the pool_size > <http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine.params.pool_size> > of > the engine to *N* and max_overflow > <http://docs.sqlalchemy.org/en/latest/core/engines.html#sqlalchemy.create_engine.params.max_overflow> > to *M* then I can issue only a max of *N+M* subrequests, after which I > get an exception: > > Traceback (most recent call last): > File "/…/site-packages/sqlalchemy/pool.py", line 1122, in _do_get > return self._pool.get(wait, self._timeout) > File "/…/site-packages/sqlalchemy/util/queue.py", line 156, in get > raise Empty > sqlalchemy.util.queue.Empty > > During handling of the above exception, another exception occurred: > > […] > File "/…/site-packages/sqlalchemy/engine/base.py", line 2147, in > _wrap_pool_connect > return fn() > File "/…/site-packages/sqlalchemy/pool.py", line 387, in connect > return _ConnectionFairy._checkout(self) > File "/…/site-packages/sqlalchemy/pool.py", line 766, in _checkout > fairy = _ConnectionRecord.checkout(pool) > File "/…/site-packages/sqlalchemy/pool.py", line 516, in checkout > rec = pool._do_get() > File "/…/site-packages/sqlalchemy/pool.py", line 1131, in _do_get > (self.size(), self.overflow(), self._timeout)) > sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 0 reached, > connection timed out, timeout 30 > > for > > sqlalchemy.pool_size = 5 > sqlalchemy.max_overflow = 0 > > When I up the pool size to fit all subrequests, then everything works fine > and the SQLA log shows me a ROLLBACK for each subrequest and one COMMIT at > the end which I think is the main request. > > Now I could set pool size to 0 to indicate no pool size limit, but I’m not > sure if that would be the correct solution here. > > What’s the recommended approach here? > > Thanks! > Jens > > -- > You received this message because you are subscribed to the Google Groups > "pylons-discuss" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To post to this group, send email to [email protected]. > To view this discussion on the web visit https://groups.google.com/d/ > msgid/pylons-discuss/6c2f13c2-ea4d-4f9d-9d47-50dc98c6e583% > 40googlegroups.com > <https://groups.google.com/d/msgid/pylons-discuss/6c2f13c2-ea4d-4f9d-9d47-50dc98c6e583%40googlegroups.com?utm_medium=email&utm_source=footer> > . > For more options, visit https://groups.google.com/d/optout. > -- You received this message because you are subscribed to the Google Groups "pylons-discuss" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To post to this group, send email to [email protected]. To view this discussion on the web visit https://groups.google.com/d/msgid/pylons-discuss/CAKdhhwF0q%3DOjphnVsEX8xpN2wwSxgK_zSPp3w3N8Ty8%2BUwNy6Q%40mail.gmail.com. For more options, visit https://groups.google.com/d/optout.
