<html><head></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>If you look up __del__ in the Python reference, you'll see that Python gives no assurance that destructors will be called for objects which exist when the Python interpreter quits. POX follows this model and does not try to "fix" it. I can think of two solutions off the top of my head:</div><div><br></div><div>1) Use atexit. See the Python documentation for more information.</div><div><br></div><div>2) Listen to core!GoingDownEvent or core!DownEvent. POX fires the first one when it's trying to shut down and the second one when it's pretty much down.</div><div><br></div><div>My recommendation would be to use core!DownEvent when possible. In your case, I think you can do something along the lines of changing your __del__(self) into _handle_GoingDownEvent(self, event) and putting a core.addListeners(self) into your __init__.</div><div><br></div>-- Murphy<div><br><div><div>On May 12, 2013, at 3:46 PM, Karthik Sharma wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div dir="ltr"><div class="gmail_default"><div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif">I have a class called MyController where I use the destructor to print some statistics.</font></div>
<div class="gmail_default" style=""><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif">class MyController (object):</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> def __init__ (self, connection):</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.connection = connection</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> connection.addListeners(self)</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # Use this table to keep track of which ethernet address is on</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # which switch port (keys are MACs, values are ports).</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.mac_to_port = {}</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # This will keep track of the traffic matrix. </font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> # matrix[i][j]=number of times a packet from i went to j</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.matrix={}</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.total_ins_time = 0</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.total_query_time = 0</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.total_ins_count = 0</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> self.total_query_count = 0</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> def __del__(self):</font></div>
<div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> print "avg insert time ",(self.total_ins_time/self.total_ins_count);</font></div><div class="gmail_default"><font color="#000000" face="arial, helvetica, sans-serif"> print "avg query time",(self.total_query_time/self.total_query_count);</font></div>
<div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">
I have a function </div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">def act_like_switch (self, packet, packet_in):</div>
<div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small">which implements the logic.It is called from </div>
<div style="color:rgb(0,0,0);font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div><font color="#000000" face="arial, helvetica, sans-serif"> def _handle_PacketIn (self, event):</font><br></div><div><font color="#000000" face="arial, helvetica, sans-serif"><br>
</font></div><div style=""><font color="#000000" face="arial, helvetica, sans-serif">Is the destructor of the MyController class a good place to print the statistics that I collect during the running of the controller? If not where should I do it? and also why is the destructor of MyController class not being called.As you would have guessed,I am new to Python.</font></div>
<div style=""><font color="#000000" face="arial, helvetica, sans-serif"><br></font></div><div style=""><font color="#000000" face="arial, helvetica, sans-serif">Regards,</font></div><div style=""><font color="#000000" face="arial, helvetica, sans-serif">Karthik.</font></div>
</div></div>
</blockquote></div><br></div></body></html>