I'm receiving this error:
sqlalchemy.exc.TimeoutError: QueuePool limit of size 5 overflow 10 reached,
connection timed out, timeout 30
I'm curious how SQLAlchemy manages database connections. I've pasted below
some psuedo-code to simplify the application.
# Create an engine
engine = create_engine('whatever')
# Create a scoped session factory
factory = sqlalchemy.orm.sessionmaker(bind=engine)
factory = sqlalchemy.orm.scoped_session(factory, scopefunc=
_app_ctx_stack.__ident_func__)
# Handle websocket connection
def my_websocket(ws):
while True:
# yield after arbitrary amount of time
model_id = yield_from_redis()
# Use the session to query the model.
session = factory()
model = session.query(SomeModel).get(model_id)
ws.send(model.seralized)
# breakout or whatever
factory.remove()
The engine and factory are being created once on a singleton. The session
is being created each time its needed. Anytime I need a session, I call
factory(). This hasn't been a problem on the HTTP server (I call remove()
after each request) but since websockets are so long lived, I assume that
creating all these session instances are somehow causing the overflow.
Should I be closing that session sooner? I assume thats the case but I'm
asking because I want to make sure the code is as stable as possible.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
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 [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.