Esempio n. 1
0
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()
Esempio n. 2
0
 def __init__(self, name):
     Condition.__init__(self)
     self.name = name
Esempio n. 3
0
 def __init__(self):
     self.finished = False
     self.release_count = 0
     Condition.__init__(self)
Esempio n. 4
0
 def __init__(self):
     self.finished = False
     self.release_count = 0
     Condition.__init__(self)