On Jan 4, 2010, at 9:22 PM, Terry Jones wrote: > I just wrote the below for fun. It's untested :-)
> It's a class that you initialize with a callable (f), and which gives you > back a deferred (d) that will fire when f fires. Alternately, you can fire > d yourself by calling 'callback' or 'errback' on the class instance and > passing a value. That value is returned via d. I already lost you at the first sentence. The class below never appears to use 'self._f', and ... Deferreds are things that fire, I don't see how the callable (f) can fire. Can you rephrase your intent? > The reason this is useful is that normally when you call a function that > returns a deferred, you can't easily "cancel" the deferred because it is > made and controlled by the function you called. The callback or errback on > the deferred is (very likely) going to be called at some point. OTOH, in > the class below you get to "cancel" the deferred by triggering it yourself. > If you fire d in this way, then when the original deferred fires (if ever), > its result is ignored. I'm glad you're thinking about this, because it is an *extremely* thorny issue which I would really like to address one day. Many of the issues you're talking about were brought up, and various solutions suggested, then found problematic, then modified ad nauseam on <http://twistedmatrix.com/trac/ticket/990>. If you can read that discussion and make some sense of it, perhaps you can post a recommendation there, or at least a summary of the discussion so far so that I don't have to read the whole discussion again to remember what I think should happen next? :) > I don't know why defer.Deferred.setTimeout is deprecated, but I guess it's > partly to do with this control issue. This is one of the reasons, but another major reason is that 'setTimeout' does not belong as a method of Deferred. If we did support cancellation somehow, the way to set a timeout would be to do 'reactor.callLater(5.0, myDeferred.cancel)'. Deferred was originally in twisted.python and it really should have remained there, decoupled from twisted.internet. _______________________________________________ Twisted-Python mailing list Twisted-Python@twistedmatrix.com http://twistedmatrix.com/cgi-bin/mailman/listinfo/twisted-python