[Baypiggies] On Python Design

Glen Jarvis glen at glenjarvis.com
Thu Mar 6 00:28:42 CET 2008

At BayPIGgies, I get a lot of help learning the language, good coding  
standards, etc… But, I hadn’t seen much on good architecture/design,  
tips/tricks, etc. Maybe we can add a future talk on  architecture  
ideas/concepts to our list?

Before that day, however, I’m desperate to get some help with  
something that I designed (I thought well), only to find myself boxed  
in a corner.

My project is obviously something I can’t discuss in too much detail  
(although I think it's silly, I promised not to share; and I always  
try to keep my promises). So, I made a sample test case to demonstrate  
a hypothetical situation that mimics my situation.

I have a self monitoring API that launches behind the scenes for the  
developers that use such a job. It is called simply by importing the  
library and instantiating an object. For example:

import time
import DaCoolAPI

# This is kewl
myDaCool = DaCoolAPI.DaCool()

print "Ho hum.. working away..."
for x in range(1, 5):
     print ".",

But, behind the scenes, as soon as DaCoolAPI is instantiated, config  
files are parsed, external processes for monitoring are launched, etc.

The problem is I had intended the entire time to do things, like clean- 
up, when the DaCool object was ‘done’ (i.e., almost always at program  

In this test case, the DaCool.__del__ destructor is called without  
worry. However, that is NOT a guarantee in the big picture (my much  
larger app). Now, trying to get the Python atexit module (http://docs.python.org/lib/module-atexit.html 
) to do this same job is tricker than it looks.

Everything has previously been at the object level. The atexit is a  
module level function. I don’t readily have access to the objects I  
need at the module level. And, most of my clean-up are hidden within  
objects. Also, if I do this in the monitoring portion, I’m obviously  
going to get multiple processes all seeing the atexit function and get  
the exit handlers called two or three times.


When I thought I was using a clean object oriented design, I suddenly  
have a mess because I didn’t know destructors were never guaranteed to  


Now, with all of that said, I would like to ask my questions:

1)       1) Have I over-used the object-oriented model?
2)       2) Is there a clean fix to get this back into the object- 
oriented model?
3)       3) Do I need to change all objects so they are modules  
(although that isn’t possible for at least one – the one that needs to  
be provided for the programmer)

Any feedback, ideas, input – even pickiness if I missed some coding  
standards – are all appreciated. It never hurts to tear this to pieces  
– The gems I get are worth any bruises to my ego - and I get to learn  
something from those mistakes so I'm a better coder next time =)


glen at glenjarvis.com

"You must be the change you wish to see in the world." -M. Gandhi

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/baypiggies/attachments/20080305/6a1a314f/attachment-0002.htm 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DaCoolAPI.py
Type: text/x-python-script
Size: 1115 bytes
Desc: not available
Url : http://mail.python.org/pipermail/baypiggies/attachments/20080305/6a1a314f/attachment-0002.bin 
-------------- next part --------------
A non-text attachment was scrubbed...
Name: DaCoolMonit.py
Type: text/x-python-script
Size: 2674 bytes
Desc: not available
Url : http://mail.python.org/pipermail/baypiggies/attachments/20080305/6a1a314f/attachment-0003.bin 
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://mail.python.org/pipermail/baypiggies/attachments/20080305/6a1a314f/attachment-0003.htm 

More information about the Baypiggies mailing list