def _complete(self, out): assert not BaseTask._cleanup_running, "Discontinuing processing because cleanup has started." msg(consoleformat="%(task)r._complete(%(result)r)", task=self, result=out) if isinstance(out, failure.Failure): try: self._fail(out) self.deferred.pause() BaseTask._all_cleanup() reactor.callFromThread(reactor.stop) return out except: err(failure.Failure()) if self.deferred.callbacks: self.deferred.addBoth(self._complete) return out parent = getattr(self, 'parent', None) try: if parent: parent.complete_sub(out, self) finally: if self in self.__bg_tasks: self.__bg_tasks.remove(self) if not self.__bg_tasks and reactor.running: reactor.stop() return out
def _all_cleanup(cls): cls._cleanup_running = True for task in cls.__bg_tasks: msg(consoleformat="cleaning %(task)r", task=task) try: task.deferred.pause() task._cleanup() except: err(failure.Failure())
def _fail(self, error): err(consoleformat=u"Task %(task)r failed with output %(output)r", task=self, output=error._taskoutput) err(error)
def _fail(self, error): err(consoleformat=u"Task %(task)r failed.", task=self) err(error)