[Twisted-Python] Deferred question

Gabriel Rossetti gabriel.rossetti at arimaz.com
Mon Dec 8 02:27:41 MST 2008


Hello everyone,

I have a question concerning defers, I have a service that needs to 
query IO until it answers. The IO can be disconnected, connected but 
off, connected and on; depending on the state I get different 
exceptions. I wrote something like :

def __requestId(self, _):
        d = self.callPlugin(PLUGIN_NAME)
        d.addCallback(self.__receivedAns)
        d.addErrback(self.__requestId)

The plugin makes the request in a thread and the deferred is returned 
and called when either an answer is received or am exception is raised 
(e.g. timeout, missing hardware, etc)

This seams to work well, except that when I let the system run for a 
long time without the hardware being present or off (several hours/days) 
the memory consumption goes way up. I don' t really know what is causing 
this, and I'm looking for possible reasons, so I was wondering if maybe 
this could be what is causing the problem. It's probably not that, 
because from what I understand it works like this :

   1. the first request is made
   2. there is a timeout or something that raises the exception
   3. the errback gets called
   4. it makes a new request
   5. the deferred gets garbage collected
   6. the new request follows the same path

Can anyone confirm that this is correct, or are my defers somehow 
staying alive and not being garbage collected?

Thank you,
Gabriel Rossetti




More information about the Twisted-Python mailing list