Is RAII possible in Python?

Pierre Rouleau prouleau at impathnetworks.com
Mon Nov 17 23:20:34 EST 2003



Pierre Rouleau wrote:

> As much as I love Python, I sometimes find myself wishing Python 
> supported the RAII idiom (resource acquisition is initialization) that 
> is available in C++, the emerging D language, and others.
> 
> In some situations (like controlling non-memory resources) it is nice to 
> be able to create an object that will execute some code on its 
> destruction.  For example, an object that controls access to a critical 
> section: the creation of the object calls the function required to enter 
> the critical section, and the __del__() calls the function required to 
> exit the critical section.  If an exception occurs while the code is 
> insinde the critical section managed by the object, the the object's 
> __del__() is automatically called and the critical section exited.
> 
> AFAIK, the call of __del__() method on object destruction is not 
> garanteed to be called when the interpreter exists.  Is this true?
> 
> Is the __del__() mehod of an object garanteed to be called when a 
> function exists normally or is forced to exit by an exception?
> 
> Is RAII available in Python?
> 

Thanks to all that posted a reply.

To summarize those replies, in Python 2.3 the 'calling' code is 
responsible to provide protection with the try/finally clause, as in 
(atken from pep 310):

     the_lock.acquire()
         try:
             ....
         finally:
             the_lock.release()

PEP-310 (http://www.python.org/peps/pep-0310.html) proposes a more 
condensed syntax using a new keyword (with).

I have seen some PEP310 discussion on comp.python.devel and I hope 
PEP310 will be implemented in the next version of Python (2.4) as 
written on the PEP-310 page.  Where can we find out about the state of a 
PEP and whether it's going to get implemented?


Thanks!

Pierre

	





More information about the Python-list mailing list