[Twisted-web] Custom __del__ not run

Rasjid Wilcox rasjidw at openminddev.net
Tue Jul 26 03:49:27 MDT 2005


Hello again.

I have my xmlrpc class that I am running in twisted.  I want it to do some 
cleaning up when it is finished, and so I have defined a custom __del__ 
procedure.

However, when mixed with a looping call, it never gets called.  Sample code 
below.  Remove the two lines starting with self.looping, and it all works as 
expected.  Put them in, and the custom __del__ is not called.

Is this a bug in twisted?  Or have I broken some twisted rule about using 
__del__ procedures?  Is there some other way of saying 'when you have stopped 
the reactor, do foo', that twisted would be happy with?

Any suggestions welcome.  :-)

Thanks,

Rasjid

---------------------------------
from twisted.web import xmlrpc

import xmlrpclib
from twisted.internet import reactor, task

class Hello(xmlrpc.XMLRPC):
    def __init__(self):
        print 'Init class Hello'
        # the following two lines cause the custom __del__
        # function to never be called
        self.looping = task.LoopingCall(self.foo)
        self.looping.start(5)
    def __del__(self):
        print 'Tidy up class Hello'
    def foo(self):
        print 'foo!'
    def xmlrpc_hello(self):
        """Return 'hello, world'."""
        return 'hello, world!'
    def xmlrpc_quit(self):
        reactor.callLater(0.1, reactor.stop)
        return 'Shutting down server'

def main():
    from twisted.web import server
    r = Hello()
    reactor.listenTCP(7080, server.Site(r), interface = '127.0.0.1')
    reactor.run()

if __name__ == '__main__':
    main()


-- 
Rasjid Wilcox
Melbourne, Australia (UTC +10 hrs)



More information about the Twisted-web mailing list