summaryrefslogtreecommitdiff
path: root/decorators.py
diff options
context:
space:
mode:
authorSylvain <syt@logilab.fr>2008-06-23 12:08:46 +0200
committerSylvain <syt@logilab.fr>2008-06-23 12:08:46 +0200
commite6393a86a17f723b2c438e3326ad553dae5e3134 (patch)
treefc49a76a5608321eeea38c3d8319917a4763767b /decorators.py
parentab987c5cd81803d02f854cb3977ed54cec187872 (diff)
downloadlogilab-common-e6393a86a17f723b2c438e3326ad553dae5e3134.tar.gz
new @locked decorator
Diffstat (limited to 'decorators.py')
-rw-r--r--decorators.py18
1 files changed, 18 insertions, 0 deletions
diff --git a/decorators.py b/decorators.py
index 72b88ff..b952a56 100644
--- a/decorators.py
+++ b/decorators.py
@@ -112,7 +112,9 @@ class classproperty(object):
def __get__(self, inst, cls):
return self.get(cls)
+
from time import clock
+
def timed(f):
def wrap(*args, **kwargs):
t = clock()
@@ -122,3 +124,19 @@ def timed(f):
return res
return wrap
+
+def locked(acquire, release):
+ """decorator taking two methods to acquire/release a lock as argument,
+ returning a decorator function which will call the inner method after
+ having called acquire(self) et will call release(self) afterwards.
+ """
+ def decorator(f):
+ def wrapper(self, *args, **kwargs):
+ acquire(self)
+ try:
+ return f(self, *args, **kwargs)
+ finally:
+ release(self)
+ return wrapper
+ return decorator
+