[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...

James


More information about the Web-SIG mailing list