class AbortEvent(object): """Event class with same interface as :func:`threading.Event` but it adds a message which can be use to raise an excption with.""" def __init__(self): self.__message = "" self.__cond = Condition(Lock()) self.__flag = False self.raised = False def _reset_internal_locks(self): # private! called by Thread._reset_internal_locks by _after_fork() self.__cond.__init__() def is_set(self): return self.__flag def message(self): return self.__message def set(self): self.__cond.acquire() try: self.__flag = True self.__message = "" self.__cond.notify_all() finally: self.__cond.release() def raise_exception(self, reason): """set the event and provide a reason""" if self.raised: return self.__cond.acquire() try: self.raised = True self.__flag = True self.__message = reason self.__cond.notify_all() finally: self.__cond.release() def clear(self): self.__cond.acquire() try: self.__flag = False self.__message = "" finally: self.__cond.release() def wait(self, timeout=None): self.__cond.acquire() try: if not self.__flag: self.__cond.wait(timeout) return self.__flag finally: self.__cond.release()
def __init__(self, name): Condition.__init__(self) self.name = name
def __init__(self): self.finished = False self.release_count = 0 Condition.__init__(self)