[Twisted-Python] Deferred.setTimeout is deprecated, replacement ideas?

Gabriel Rossetti gabriel.rossetti at arimaz.com
Wed Jul 16 05:22:09 EDT 2008


Gabriel Rossetti wrote:
> Hello everyone,
>
> I was going to use Deferred.setTimeout until I saw that it was 
> deprecated. Does anyone know why? I found it handy and I find that 
> case-per-case replacements tend to be complicated. Does anyone have 
> any ideas on how to replace it?
>
> I have a queue containing read results from I/O, the get() method 
> returns a deferred fired when the data arrives (sort of like 
> defer.DeferredQueue). Since I need to be able to set a read timeout, 
> i.e. if the data doesn't arrive after a certain time, I need to raise 
> an exception and remove the deferred from the internal list; the 
> defer's timeout would have been handy here :-(.
>
> I was thinking of doing something like this, if data isn't present in 
> the data internal list:
>
> d = Deferred()
> dc = reactor.callLater(self.timeout, self.__timeoutCallback, d)
> d.addCallback(self.__timeoutCanceller)
>
> Then a tuple containing the Deferred ("d"), the DelayedCall ("dc") is 
> then put in the internal waiting list. If the timeout doesn't expire 
> before the data arrives, then the DelayedCall is canceled, if it does 
> expire then the tuple is removed from the queue (potentially slow) and 
> an exception is raised.
>
> Is there a better way of doing this? Any ideas?
>
> Thank you,
> Gabriel
>
>
I can remove the "d.addCallback(self.__timeoutCanceller)" call since the 
DelayedCall can be canceled by the code that does the waiting list 
processing.




More information about the Twisted-Python mailing list