From: Costas M. <co...@ho...> - 2002-05-02 21:57:31
|
I remember there was a conversation here about DBPool.py and how it is not really pooling DB Connections. Has anybody attacked this problem? Thanks, Costas _________________________________________________________________ Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp. |
From: Karl P. <ka...@pu...> - 2002-05-02 22:09:09
Attachments:
ConnectionPool.py
|
On Thu, 2002-05-02 at 15:57, Costas Malamas wrote: > I remember there was a conversation here about DBPool.py and how it is not > really pooling DB Connections. Has anybody attacked this problem? > > Thanks, > I've got a ConnectionPool class that I wrote. And your welcome to have a look at it. It would be nice if it inherited from Configurable so that max size would work. Also right now it only pools connections to one database. That should be easy to change though. --Karl > Costas > > > > _________________________________________________________________ > Get your FREE download of MSN Explorer at http://explorer.msn.com/intl.asp. > > > _______________________________________________________________ > > Have big pipes? SourceForge.net is looking for download mirrors. We supply > the hardware. You get the recognition. Email Us: ban...@so... > _______________________________________________ > Webware-discuss mailing list > Web...@li... > https://lists.sourceforge.net/lists/listinfo/webware-discuss |
From: Ian B. <ia...@co...> - 2002-05-03 20:11:17
|
One technique I've thought about in lieu of round-robin pooling is simply allocating one connection per thread. E.g.: def makeConnection(): return dbadapter.connect(arg1, arg2, etc) _connectionPool = {} def getConnection(): name = threading.currentThread().getName() if not _connectionPool.has_key(name): _connectionPool[name] = makeConnection() return _connectionPool[name] Of course, you could phrase this as a wrapper just like DBPool. I can't decide if there's any advantages to this or not. It doesn't rely on garbage collection, but a single thread can't get more than one connection (though I don't know if that's generally needed), and passing connections between threads might be problematic. Ian |
From: Karl P. <ka...@pu...> - 2002-05-03 20:25:17
|
Ian Bicking wrote: >One technique I've thought about in lieu of round-robin pooling is >simply allocating one connection per thread. E.g.: > >def makeConnection(): > return dbadapter.connect(arg1, arg2, etc) > >_connectionPool = {} >def getConnection(): > name = threading.currentThread().getName() > if not _connectionPool.has_key(name): > _connectionPool[name] = makeConnection() > return _connectionPool[name] > > >Of course, you could phrase this as a wrapper just like DBPool. I can't >decide if there's any advantages to this or not. It doesn't rely on >garbage collection, but a single thread can't get more than one >connection (though I don't know if that's generally needed), and passing >connections between threads might be problematic. > > Ian > Also, threads get cleaned up and new threads with new names come back. This leads to over consumption of connections which is undesirable as resources on the DB machine will not be released until the AppServer is bounced. --Karl |