예제 #1
0
class Semaphore(object):
    def __init__(self, count):
        self._count = count
        self._channel = Channel()

    @property
    def count(self):
        return self._count

    def acquire(self, blocking=True, timeout=TIMEOUT_CURRENT):
        if self._count > 0:
            self._count -= 1
            return True
        else:
            if not blocking:
                return False
            else:
                return self._channel.receive(timeout)

    def release(self):
        if self._channel.has_receiver():
            self._channel.send(True)
        else:
            self._count += 1

    def __enter__(self):
        self.acquire()
        return self

    def __exit__(self, type, value, traceback):
        self.release()
예제 #2
0
class Semaphore(object):
    def __init__(self, count):
        self._count = count
        self._channel = Channel()

    @property
    def count(self):
        return self._count

    def acquire(self, blocking = True, timeout = TIMEOUT_CURRENT):
        if self._count > 0:
            self._count -= 1
            return True
        else:
            if not blocking:
                return False
            else:
                return self._channel.receive(timeout)

    def release(self):
        if self._channel.has_receiver():
            self._channel.send(True)
        else:
            self._count += 1

    def __enter__(self):
        self.acquire()
        return self

    def __exit__(self, type, value, traceback):
        self.release()
예제 #3
0
 def __init__(self, count):
     self._count = count
     self._channel = Channel()
예제 #4
0
 def __init__(self, count):
     self._count = count
     self._channel = Channel()