[Web-SIG] WSGI thread affinity/interleaving
James Y Knight
foom at fuhm.net
Mon Dec 19 19:48:03 CET 2005
On Dec 18, 2005, at 2:33 PM, Ian Bicking wrote:
> James Y Knight wrote:
>> I'm worried about database access. Most DBAPI adapters have
>> threadsafety level 2: "Threads may share the module and
>> connections.". So with those, at least, it should be fine to move
>> a connection between threads, since "share OK" implies "move
>> OK". However, no documentation I've found has said anything
>> separately about whether it's safe to _move_ a cursor between
>> threads. It seems likely to me that it would not be safe, at
>> least in some database adapters. And if it's not safe, that means
>> a WSGI result iterator cannot use any DBAPI cursor functionality
>> which seems a drag.
>> Does anybody have practical experience with the safety of moving
>> a DBAPI cursor between threads?
> I haven't done that, but SQLite (2?) notably doesn't allow you to
> move a connection between threads. I'm not actually sure what
> problems it causes if you do move them -- it may simply be an
> overzealous warning.
> CCing DB-SIG -- people there might know more details.
Okay, so I think the overall recommendation from DB-SIG is "don't do
that". I'm not sure where that leaves the WSGI discussion now? "Don't
use databases from a result iterator", I guess (unless threadsafety
== 3)? But do anybody else's WSGI server implementations move apps
between threads? I don't especially want to make Twisted's be unique
in this way even if it is technically allowed, as I can only see it
causing problems when people's apps *do* try to use databases from
result iterators and *do* work everywhere else...
More information about the Web-SIG