Part of twisted.internet.task View Source View In Hierarchy
A cooperative task is an iterator where each iteration represents an
atomic unit of work. When the iterator yields, it allows the Cooperator
to
decide which of its tasks to execute next. If the iterator yields a defer.Deferred
then work will pause until the defer.Deferred
fires and completes its callback chain.
When a Cooperator
has more than one task, it distributes work between all tasks.
There are two ways to add tasks to a Cooperator
,
cooperate
and coiterate
.
cooperate
is the more useful of the two, as it returns a CooperativeTask
,
which can be paused
,
resumed
and waited
on
. coiterate
has the same effect, but returns only a defer.Deferred
that fires when the task is done.
Cooperator
can be used for many things, including but not limited to:
Deferred
to fire, doing the next thing, repeat (i.e. serializing a sequence of
asynchronous tasks)
Multiple Cooperator
s
do not cooperate with each other, so for most cases you should use the global
cooperator
.
Method | __init__ | Create a scheduler-like object to which iterators may be added. |
Method | coiterate | Add an iterator to the list of iterators this Cooperator is
currently running. |
Method | cooperate | Start running the given iterator as a long-running cooperative task, by calling next() on it as a periodic timed event. |
Method | start | Begin scheduling steps. |
Method | stop | Stop scheduling steps. Errback the completion Deferreds of all iterators which have been added and forget about them. |
Method | running | Is this Cooperator is
currently running? |
Method | _addTask | Add a CooperativeTask
object to this Cooperator . |
Method | _removeTask | Remove a CooperativeTask
from this Cooperator . |
Method | _tasksWhileNotStopped | Yield all CooperativeTask
objects in a loop as long as this Cooperator 's
termination condition has not been met. |
Method | _tick | Run one scheduler tick. |
Method | _reschedule | Undocumented |
Parameters | terminationPredicateFactory | A no-argument callable which will be invoked at the beginning of each step and should return a no-argument callable which will return True when the step should be terminated. The default factory is time-based and allows iterators to run for 1/100th of a second at a time. |
scheduler | A one-argument callable which takes a no-argument callable and should invoke it at some future point. This will be used to schedule each step of this Cooperator. | |
started | A boolean which indicates whether iterators should be stepped as soon as
they are added, or if they will be queued up until Cooperator.start
is called. |
Cooperator
is
currently running.
Equivalent to cooperate
,
but returns a defer.Deferred
that will be fired when the task is done.
Parameters | doneDeferred | If specified, this will be the Deferred used as the completion deferred. It is suggested that you use the default, which creates a new Deferred for you. |
Returns | a Deferred that will fire when the iterator finishes. |
Parameters | iterator | the iterator to invoke. |
Returns | a CooperativeTask
object representing this task. |
CooperativeTask
objects in a loop as long as this Cooperator
's
termination condition has not been met.Cooperator
is
currently running?Returns | True if the Cooperator is
running, False otherwise. (type: bool ) |