yeah what he said, but also, in a forking situation the easiest thing 
you can do is, as soon as the fork starts, say engine.dispose().  Or 
just engine = <some new engine>.  all you need to do is make sure no DB 
connections in the pool (or anywhere else) are allowed to continue in 
the fork.

On Sun Jun 15 22:01:09 2014, Jeff Dairiki wrote:
> On Sun, Jun 15, 2014 at 01:26:47PM -0700, Jonathan Vanasco wrote:
>> i'm using sqlalchemy in pyramid, under uwsgi.
>>
>> i've been reading up on forking issues that can arise in this stack.
>>
>> from what I understand, issues arise because the "SqlAlchemy Connection" is
>> established before the fork, resulting in each forked process potentially
>> trying to use the same connection.  One of the fixes is to (re)connect
>> after the fork.
>>
>> This is where i'm confused...  I don't know what a "SqlAlchemy Connection"
>> refers to.
>>
>> I've read up on the uwsgi, sqlalchmy and pylons lists + docs -- I can't get
>> any better info on what this SqlAlchemy connection is, or what component is
>> having the issues.
>>
>> If the issue is with the SqlAlchemy engine connecting to the database, and
>> it's internal db connection, then I should be fine -- SqlAlchemy doesn't
>> connect in my apps until the first request.  I verified this with
>> postgresql logs.
>>
>> If the issue is with creating a SqlAlchemy engine or sessionmaker, then I
>> will need to rewrite some stuff.
>>
>> Does anyone know the specifics of the "connection" that has fork issues?
>>
>
> A problem that can arise when using sqla connection pooling is (I'm not
> sure that this happens under all conditions, but it has happened to me):
>
> 1. In the master process (e.g. in pyramid main()), engine is set up
>    (with pooling) a sqlconnection made, used, and closed.  The connection,
>    in this case is not actually closed, but just returned to the pool.
>
> 2. Fork (e.g. uwsgi forks the workers)
>
> 3. Each child process thinks it's got a connection in its pool.  The
>    problem is it's the same connection in each process.  When multiple
>    process try to use the same connection, it's bad, obviously.
>
> One fix, if you make connections in the master process, is, instead
> of closing the connection (connection.close()) invalidate it
> (connection.invalidate()).  Then the underlying connection is
> actually closed, rather than returned to the pool.
>
> There some on this in this thread:
>   
> https://groups.google.com/forum/#!searchin/sqlalchemy/UnicodeEncodeErrors/sqlalchemy/Xf0fWsCqdCg/5-6aRpYcuecJ
>
> Jeff
>

-- 
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.
For more options, visit https://groups.google.com/d/optout.

Reply via email to