How to best use connection pooling in SQLAlchemy for PgBouncer transaction-level pooling?
with PGBouncer, you'd probably want to just stick with NullPool.  In that case you may be able to share a single Engine across subprocesses since no socket connections will be carried over the subprocess boundary.  But you can't share anything referring to a Connection object, like a Session with an active transaction, over this boundary.    You definitely wouldn't want to do "engine-per-request" though, an Engine is an expensive object that accumulates a lot of information about a particular database URL the first time it sees it.