def __init__(self, function, function_info, interval, progress=None): InProgress.__init__(self) self._coroutine = function self._coroutine_info = function_info self._timer = Timer(self._step) self._interval = interval self._prerequisite_ip = None self._valid = True # This object (self) represents a coroutine that is in progress: that # is, at some point in the coroutine, it has yielded and expects # to be reentered at some point. Even if there are no outside # references to this CoroutineInProgress object, the coroutine must # resume. # # Here, an "outside reference" refers to a reference kept by the # caller of the API (that is, not refs kept by kaa internally). # # For other types of InProgress objects, when there are no outside # references to them, clearly nobody is interested in the result, so # they can be destroyed. For CoroutineInProgress, we mustn't rely # on outside references to keep the coroutine alive, so we keep refs # for active CoroutineInProgress objects in a global set called # _active_coroutines. We then then remove ourselves from this set when # stopped. # _active_coroutines.add(self) if progress is NotFinished: # coroutine was stopped NotFinished, start the step timer self._timer.start(interval) elif isinstance(progress, InProgress): # continue when InProgress is done self._prerequisite_ip = progress progress.connect_both(self._continue, self._continue) elif progress is not None: raise AttributeError('invalid progress %s' % progress)
def __init__(self, callback, *args, **kwargs): InProgress.__init__(self) self._callback = Callback(callback, *args, **kwargs)