[Python-ideas] context managers used to allocate resources can be abused - a solution
Terry Reedy
tjreedy at udel.edu
Sun Dec 18 04:23:13 CET 2011
On 12/16/2011 9:07 PM, Nick Coghlan wrote:
> On Sat, Dec 17, 2011 at 11:00 AM, Alon Horev<alon at horev.net> wrote:
>> Hello,
>>
>> while I was implementing a connection pool i've noticed a pitfall of our
>> beloved with statements:
>>
>> with pool.get_connection() as conn:
>> ....conn.execute(...)
>> conn.execute(...) # the connection has been returned to the pool and does
>> not belong to the user!
Good catch!
> 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?
> Try the above code structure with a file object and it will give you
> "IO operation on closed file".
Because file_object.__exit__ closes the connection to the OS resource.
--
Terry Jan Reedy
More information about the Python-ideas
mailing list