t.i.d.Deferred : class documentation

Part of twisted.internet.defer View Source View In Hierarchy

Known subclasses: twisted.internet.defer.DeferredList, twisted.persisted.crefutil._Defer

This is a callback which will be put off until later.

Why do we want this? Well, in cases where a function in a threaded program would block until it gets a result, for Twisted it should not block. Instead, it should return a Deferred.

This can be implemented for protocols that run over the network by writing an asynchronous protocol for twisted.internet. For methods that come from outside packages that are not under our control, we use threads (see for example twisted.enterprise.adbapi).

For more information about Deferreds, see doc/core/howto/defer.html or http://twistedmatrix.com/documents/current/core/howto/defer.html

When creating a Deferred, you may provide a canceller function, which will be called by d.cancel() to let you do any clean-up necessary if the user decides not to wait for the deferred to complete.
Instance VariablescalledA flag which is False until either callback or errback is called and afterwards always True. (type: bool )
pausedA counter of how many unmatched pause calls have been made on this instance. (type: int )
_suppressAlreadyCalledA flag used by the cancellation mechanism which is True if the Deferred has no canceller and has been cancelled, False otherwise. If True, it can be expected that callback or errback will eventually be called and the result should be silently discarded. (type: bool )
_runningCallbacksA flag which is True while this instance is executing its callback chain, used to stop recursive execution of _runCallbacks (type: bool )
_chainedToIf this Deferred is waiting for the result of another Deferred, this is a reference to the other Deferred. Otherwise, None.
Method __init__ Initialize a Deferred.
Method addCallbacks Add a pair of callbacks (success and error) to this Deferred.
Method addCallback Convenience method for adding just a callback.
Method addErrback Convenience method for adding just an errback.
Method addBoth Convenience method for adding a single callable as both a callback and an errback.
Method chainDeferred Chain another Deferred to this Deferred.
Method callback Run all success callbacks that have been added to this Deferred.
Method errback Run all error callbacks that have been added to this Deferred.
Method pause Stop processing on a Deferred until unpause() is called.
Method unpause Process all callbacks made since pause() was called.
Method cancel Cancel this Deferred.
Method __str__ Return a string representation of this Deferred.
Method _startRunCallbacks Undocumented
Method _continuation Build a tuple of callback and errback with _continue to be used by _addContinue and _removeContinue on another Deferred.
Method _runCallbacks Run the chain of callbacks once a result is available.
def __init__(self, canceller=None): (source)
Initialize a Deferred.
Parameterscanceller

a callable used to stop the pending operation scheduled by this Deferred when Deferred.cancel is invoked. The canceller will be passed the deferred whose cancelation is requested (i.e., self).

If a canceller is not given, or does not invoke its argument's callback or errback method, Deferred.cancel will invoke Deferred.errback with a CancelledError.

Note that if a canceller is not given, callback or errback may still be invoked exactly once, even though defer.py will have already invoked errback, as described above. This allows clients of code which returns a Deferred to cancel it without requiring the Deferred instantiator to provide any specific implementation support for cancellation. New in 10.1. (type: a 1-argument callable which takes a Deferred. The return result is ignored. )
def addCallbacks(self, callback, errback=None, callbackArgs=None, callbackKeywords=None, errbackArgs=None, errbackKeywords=None): (source)

Add a pair of callbacks (success and error) to this Deferred.

These will be executed when the 'master' callback is run.
def addCallback(self, callback, *args, **kw): (source)

Convenience method for adding just a callback.

See addCallbacks.
def addErrback(self, errback, *args, **kw): (source)

Convenience method for adding just an errback.

See addCallbacks.
def addBoth(self, callback, *args, **kw): (source)

Convenience method for adding a single callable as both a callback and an errback.

See addCallbacks.
def chainDeferred(self, d): (source)

Chain another Deferred to this Deferred.

This method adds callbacks to this Deferred to call d's callback or errback, as appropriate. It is merely a shorthand way of performing the following:
   self.addCallbacks(d.callback, d.errback)

When you chain a deferred d2 to another deferred d1 with d1.chainDeferred(d2), you are making d2 participate in the callback chain of d1. Thus any event that fires d1 will also fire d2. However, the converse is not true; if d2 is fired d1 will not be affected.

Note that unlike the case where chaining is caused by a Deferred being returned from a callback, it is possible to cause the call stack size limit to be exceeded by chaining many Deferreds together with chainDeferred.
def callback(self, result): (source)

Run all success callbacks that have been added to this Deferred.

Each callback will have its result passed as the first argument to the next; this way, the callbacks act as a 'processing chain'. If the success-callback returns a Failure or raises an Exception, processing will continue on the *error* callback chain. If a callback (or errback) returns another Deferred, this Deferred will be chained to it (and further callbacks will not run until that Deferred has a result).
def errback(self, fail=None): (source)

Run all error callbacks that have been added to this Deferred.

Each callback will have its result passed as the first argument to the next; this way, the callbacks act as a 'processing chain'. Also, if the error-callback returns a non-Failure or doesn't raise an Exception, processing will continue on the *success*-callback chain.

If the argument that's passed to me is not a failure.Failure instance, it will be embedded in one. If no argument is passed, a failure.Failure instance will be created based on the current traceback stack.

Passing a string as `fail' is deprecated, and will be punished with a warning message.
RaisesNoCurrentExceptionErrorIf fail is None but there is no current exception state.
def pause(self): (source)
Stop processing on a Deferred until unpause() is called.
def unpause(self): (source)
Process all callbacks made since pause() was called.
def cancel(self): (source)

Cancel this Deferred.

If the Deferred has not yet had its errback or callback method invoked, call the canceller function provided to the constructor. If that function does not invoke callback or errback, or if no canceller function was provided, errback with CancelledError.

If this Deferred is waiting on another Deferred, forward the cancellation to the other Deferred.
def _startRunCallbacks(self, result): (source)
Undocumented
def _continuation(self): (source)
Build a tuple of callback and errback with _continue to be used by _addContinue and _removeContinue on another Deferred.
def _runCallbacks(self): (source)

Run the chain of callbacks once a result is available.

This consists of a simple loop over all of the callbacks, calling each with the current result and making the current result equal to the return value (or raised exception) of that call.

If self._runningCallbacks is true, this loop won't run at all, since it is already running above us on the call stack. If self.paused is true, the loop also won't run, because that's what it means to be paused.

The loop will terminate before processing all of the callbacks if a Deferred without a result is encountered.

If a Deferred with a result is encountered, that result is taken and the loop proceeds.
NoteThe implementation is complicated slightly by the fact that chaining (associating two Deferreds with each other such that one will wait for the result of the other, as happens when a Deferred is returned from a callback on another Deferred) is supported iteratively rather than recursively, to avoid running out of stack frames when processing long chains.
def __str__(self): (source)
Return a string representation of this Deferred.
API Documentation for Twisted, generated by pydoctor at 2011-10-27 16:27:37.