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()
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()
def __init__(self, count): self._count = count self._channel = Channel()