[Python-ideas] context managers used to allocate resources can be abused - a solution

Nick Coghlan ncoghlan at gmail.com
Sun Dec 18 07:41:26 CET 2011


On Sun, Dec 18, 2011 at 1:23 PM, Terry Reedy <tjreedy at udel.edu> wrote:
>> That's a bug in the connection pool implementation. If the underlying
>> connection has been returned to the pool, the proxy returned by the
>> context manager shouldn't work any more.
>
>
> I believe Nick is saying that conn.__exit__ should close the connection and
> release the resource, that being the point of with statements and context
> managers. Can you open a tracker issue?

No, that's not what I'm saying at all - the whole purpose of using a
connection pool is that you *don't* release the underlying OS resource
when you return a resource to the pool.

What I'm saying is that if a pool supports the context management
protocol for *temporary* access to one of the pool resources, then
*that* context manager is responsible for ensuring that the resource
reference returned is correctly invalidated in __exit__ (just as
closing a file object prevents further IO operations).

I'm not aware of any such pools in the stdlib (multiprocessing has
some pool APIs, but I don't believe they support the context
management protocol for pooled resources), so I'm suggesting that the
only problem here is in the design of the OP's own pool API.

Cheers,
Nick.

-- 
Nick Coghlan   |   ncoghlan at gmail.com   |   Brisbane, Australia



More information about the Python-ideas mailing list