I use PostgreSQL, but it does not matter, because when someone changes
the configuration it has still work.
"a new Engine needs to be created in each child fork"
If a worker can perform at any given time only one synchronous request
and for each worker I create a new engine, it does not have any pool.
Do not know if I understand correctly, but it overlooks the fact that
no matter whether it is an entirely new process, or created using fork
() ("memory of the parent process is` copied `Effectively")?
The engine is not shared. I need to create it again.
On May 28, 4:53 pm, Michael Bayer <[email protected]> wrote:
> On May 28, 2011, at 4:25 AM, ddarko wrote:
>
>
>
>
>
>
>
>
>
> >http://lists.unbit.it/pipermail/uwsgi/2011-May/002078.html:
>
> > "...Unfortunately, when running our
> > app in uWSGI with more than one worker, we get sporadic, but frequent,
> > sqlalchemy-related exceptions when testing under load. Following is an
> > example of one of the more common errors we get.
>
> > Error - <class 'sqlalchemy.exc.OperationalError'>:
> > (OperationalError) server closed the connection unexpectedly
> > This probably means the server terminated abnormally
> > before or while processing the request.
>
> > It would seem that our app, or sqlalchemy, is making an assumption
> > that
> > is no longer true when running as multiple workers in uWSGI...."
>
> > uWSGI 0.9.8
> > Python 3.2
> > SQLAlchemy 0.7.0
>
> > Does anyone use this combination?
> > How to share a pool of connections between workers?
>
> The mechanics of fork() are such that the memory of the parent process is
> effectively "copied" to the child process. The SQLAlchemy Engine by default
> maintains a pool of database connections, which like everything else is
> replicated into the child process. Each database connection in the pool
> ultimately references a TCP/IP handle to the remote database, unless you're
> using SQLite in which case it's an open file handle. These handles lose
> their meaning when referenced in a new process, that is the child fork, and
> attempts to use the connections in the new process will fail.
>
> So the short answer is a new Engine needs to be created in each child fork,
> or otherwise pooling can be turned off using NullPool.
--
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected].
To unsubscribe from this group, send email to
[email protected].
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en.