472,348 Members | 2,016 Online
Bytes | Software Development & Data Engineering Community
+ Post

Home Posts Topics Members FAQ

Join Bytes to post your question to a community of 472,348 software developers and data experts.

Is RAII possible in Python?

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

Pierre

Jul 18 '05 #1
4 4637
Pierre Rouleau wrote:
Is RAII available in Python?


In practice, yes. Objects are destroyed when their reference count goes to
zero.

In theory, no. The language specification does not guarantee this behavior.
--
Rainer Deyke - ra*****@eldwood.com - http://eldwood.com
Jul 18 '05 #2
Pierre Rouleau <pr******@impathnetworks.com> writes:
AFAIK, the call of __del__() method on object destruction is not
garanteed to be called when the interpreter exists. Is this true?
I think it is supposed to be called.
Is the __del__() mehod of an object garanteed to be called when a
function exists normally or is forced to exit by an exception?
No.
Is RAII available in Python?


You can use the try/finally construction to make sure the object gets
destroyed when the finally clause runs.
Jul 18 '05 #3
You need to use the try/finally statement or see PEP 310.
http://www.python.org/peps/pep-0310.html
Jul 18 '05 #4


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

Jul 18 '05 #5

This thread has been closed and replies have been disabled. Please start a new discussion.

Similar topics

26
by: codymanix | last post by:
Last night I had several thought about RAII and want to discuss a bit. Why doesn't CSharp support destructors in structs? Wouldn't that make RAII...
23
by: Markus Elfring | last post by:
The class "auto_ptr" implements the RAII pattern for pointer types. It seems that an implementation is not provided for non-pointer values by the...
9
by: plahey | last post by:
I have been dabbling in Python for a while now. One of the things that really appeals to me is that I can seem to be able to use C++-style RAII...
0
better678
by: better678 | last post by:
Question: Discuss your understanding of the Java platform. Is the statement "Java is interpreted" correct? Answer: Java is an object-oriented...
0
by: Naresh1 | last post by:
What is WebLogic Admin Training? WebLogic Admin Training is a specialized program designed to equip individuals with the skills and knowledge...
0
by: Matthew3360 | last post by:
Hi there. I have been struggling to find out how to use a variable as my location in my header redirect function. Here is my code. ...
2
by: Matthew3360 | last post by:
Hi, I have a python app that i want to be able to get variables from a php page on my webserver. My python app is on my computer. How would I make it...
0
by: AndyPSV | last post by:
HOW CAN I CREATE AN AI with an .executable file that would suck all files in the folder and on my computerHOW CAN I CREATE AN AI with an .executable...
0
hi
by: WisdomUfot | last post by:
It's an interesting question you've got about how Gmail hides the HTTP referrer when a link in an email is clicked. While I don't have the specific...
0
by: Matthew3360 | last post by:
Hi, I have been trying to connect to a local host using php curl. But I am finding it hard to do this. I am doing the curl get request from my web...
0
Oralloy
by: Oralloy | last post by:
Hello Folks, I am trying to hook up a CPU which I designed using SystemC to I/O pins on an FPGA. My problem (spelled failure) is with the...
0
by: Carina712 | last post by:
Setting background colors for Excel documents can help to improve the visual appeal of the document and make it easier to read and understand....

By using Bytes.com and it's services, you agree to our Privacy Policy and Terms of Use.

To disable or enable advertisements and analytics tracking please visit the manage ads & tracking page.