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