Exemple #1
0
class MTCounter(MTValue):

  def __init__( self, val = 0 ):
    MTValue.__init__(self, 0)
    self._cond = Condition(self._mutex)
    self._val = 0

  def next( self ):
    self._mutex.acquire()
    try:
      self._val += 1
      self._cond.notifyAll()
      return self._val
    finally:
      self._mutex.release()

  def incr( self ):
    self._mutex.acquire()
    try:
      self._val += 1
      self._cond.notifyAll()
    finally:
      self._mutex.release()

  # timeout in in sec, float
  def wait( self, count, timeOut = None ):
    self._mutex.acquire()
    try:
      while self._val < count:
        if not self._cond.wait(timeOut): return None  # timed out
      return True
    finally:
      self._mutex.release()
Exemple #2
0
class MTQueue:
    def __init__(self):
        self.queue = []
        self.cond = Condition()

    def push(self, val):
        self.cond.acquire()
        try:
            self.queue.append(val)
            self.cond.notifyAll()
        finally:
            self.cond.release()

    def pop(self, timeOut=None):
        shutdown.check()
        self.cond.acquire()
        try:
            while len(self.queue) == 0:
                if not self.cond.wait(timeOut):
                    raise XTimedOut('Timing out waiting on mt-queue')
            val = self.queue[0]
            self.queue = self.queue[1:]
            return val
        finally:
            self.cond.release()

    def empty(self):
        self.cond.acquire()
        try:
            return len(self.queue) == 0
        finally:
            self.cond.release()

    def getAll(self):
        self.cond.acquire()
        try:
            list = self.queue
            self.queue = []
            return list
        finally:
            self.cond.release()

    def size(self):
        self.cond.acquire()
        try:
            return len(self.queue)
        finally:
            self.cond.release()

    def clear(self):
        self.cond.acquire()
        try:
            self.queue = []
        finally:
            self.cond.release()
Exemple #3
0
class MTFlag(MTValue):

  def __init__( self, val = False, pred = bool ):
    MTValue.__init__(self, val)
    self._cond = Condition(self._mutex)
    self._pred = pred

  def set( self, val = True ):
    self._mutex.acquire()
    self._val = val
    if self._pred(val):
      self._cond.notifyAll()
    self._mutex.release()

  # timeout in in sec, float
  def wait( self, timeOut = None ):
    self._mutex.acquire()
    try:
      while not self._pred(self._val):
        if not self._cond.wait(timeOut): return None  # timed out
      return self._val  # it can be not boolean
    finally:
      self._mutex.release()