Lekko ładniejsza wersja:
import threading
from contextlib import contextmanager
class TimeoutLock(object):
def __init__(self):
self._lock = threading.Lock()
def acquire(self, blocking=True, timeout=-1):
return self._lock.acquire(blocking, timeout)
@contextmanager
def acquire_timeout(self, timeout):
result = self._lock.acquire(timeout=timeout)
yield result
if result:
self._lock.release()
def release(self):
self._lock.release()
# Usage:
lock = TimeoutLock()
with lock.acquire_timeout(3) as result:
if result:
print('got the lock')
# do something ....
else:
print('timeout: lock not available')
# do something else ...
wydaje się, że nie może podklasy threading.Lock
, więc Zamiast tego musiałem stworzyć klasę otoki.
Wygląda na to, że nie możesz tego zrobić. – Blender
[this] (http://stackoverflow.com/questions/8392640/how-to-implement-a-lock-a-timeout-in-python-2-7) może pomóc – shx2
Nie wygląda jak Chcę ;-). – Tsf