Exemplo n.º 1
0
class Executor:
    def __init__(self):
        self.lock = Lock()
        self.cond = Condition(self.lock)
        self.wg = None  # TODO sync.WaitGroup
        self.finished = False
        self.events = []

    def Initialize(self):
        self.wg.Add(1)

    def Add(self, event):
        self.lock.Lock()
        # TODO defer self.lock.Unlock()

        self.events = append(self.events, event)
        self.cond.Signal()

    def Stop(self):
        self.lock.Lock()

        if not self.finished:
            # TODO defer self.wg.Wait()
            pass

        # TODO defer self.lock.Unlock()

        self.finished = true
        self.cond.Broadcast()

    def Dispatch(self):
        self.lock.Lock()
        # TODO defer self.lock.Unlock()
        # TODO defer self.wg.Done()

        while not self.finished:
            if len(self.events) == 0:
                self.cond.Wait()
            else:
                event = self.events[0]
                self.events = self.events[1:]

                self.lock.Unlock()
                event()
                self.lock.Lock()