def _dispatch(self, job): try: result = utils.flexapply(getattr(job.target, job.method), job.args, job.kwargs) except (KeyboardInterrupt, SystemExit): raise except: etype, evalue, etraceback = exc_info() result = ExceptionResponse(etype, evalue, etraceback) self._log_exc(etype, evalue, etraceback) job.signal('done').emit(result)
def wrapped(*args, **kwargs): self = args[0] if self.l_thread != current_thread(): task = job(target=self, method=func.func_name, args=args[1:], kwargs=kwargs) self.schedule(task, False) ## to wait for the task being done would easily lead to deadlock ## just return the 'done' signal during the async call return task.signal('done') else: return utils.flexapply(func, args, kwargs)
def evt_invoke(self, evt): assert evt.value.comp is self handler = getattr(self, evt.value.method) utils.flexapply(handler, evt.value.args, evt.value.kwargs)