vio
vmilitaru at sympatico.ca
Tue Jul 9 15:09:59 EST 2002
Admittedly, the intent of re-using a cursor can only be summed up as pure greed, or the art of sucking up the last atom of speed from a given system. In dark moonless nights, I almost pitty myself. Thanks for the intro on threadsafety. Most interesting. * Bob Ippolito <bob at redivi.com> [020708 22:35]: > It depends on the particular db module, some modules have threadsafe > database instances, some don't. Some have threadsafe database cursors, > and some don't. Read the docs. If it's DBAPI compliant, check its > thread safe level. I have never used anything that's thread safe level > 3, most are level 2 or 1 in my experience. > > from http://www.python.org/topics/database/DatabaseAPI-2.0.html > threadsafety > Integer constant stating the level of thread safety the interface > supports. Possible values are: > 0 = Threads may not share the module. > 1 = Threads may share the module, but not connections. > 2 = Threads may share the module and connections. > 3 = Threads may share the module, connections and cursors. > > Sharing in the above context means that two threads may use a resource > without wrapping it using a mutex semaphore to implement resource > locking. Note that you cannot always make external resources thread safe > bymanaging access using a mutex: the resource may rely on global > variables or other external sources that are beyond your control. > > -bob > > On Wednesday, July 3, 2002, at 06:38 PM, vio wrote: > > > * Alain Tesio <alain at onesite.org> [020703 17:11]: > > > >>> For instance, I'd be very interested to read in such a tricks and > >>> tips list how to avoid the > >>> overhead of creating a database connection at each call to 'handler'. > >>> And so on. > >> > >> Just make the connection a global variable. > > > > I think I tried that, initialized the db connection at the module > > level. But somehow my cursor got corrupted, or something. I forgot > > oracle's error number, only that my workaround was to do something like > > (we're at module level here): > > > > db = DCOracle2.connect(my_login_string) > > def get_db_cursor(): > > "create database connection" > > cursor = db.cursor() # Allocate a cursor > > return cursor > > > > In fact I see that I am re-using the same connection here, so let me > > re-phrase my initial question: how do I re-use the same *cursor* (or it > > this a bad idea in the first place). I wonder what would happen in such > > a multi-threaded environment (well, I'm saling in Linuxland) where > > multiple httpd instances will hit on the db server (ora8i in my case) > > with the same cursor *concurrently* (never got to that point of > > desperation, though - but just from contemplating such possibility > > sounds like total anarchy). What I did try but eventually got an error > > on was to re-use the same cursor sequentially (in a non-threaded > > application). > > > > Cheers, Vio > > _______________________________________________ > > Mod_python mailing list > > Mod_python at modpython.org > > http://www.modpython.org/mailman/listinfo/mod_python > > _______________________________________________ > Mod_python mailing list > Mod_python at modpython.org > http://www.modpython.org/mailman/listinfo/mod_python
|