diff options
author | Sylvain <syt@logilab.fr> | 2008-06-23 12:08:46 +0200 |
---|---|---|
committer | Sylvain <syt@logilab.fr> | 2008-06-23 12:08:46 +0200 |
commit | e6393a86a17f723b2c438e3326ad553dae5e3134 (patch) | |
tree | fc49a76a5608321eeea38c3d8319917a4763767b /decorators.py | |
parent | ab987c5cd81803d02f854cb3977ed54cec187872 (diff) | |
download | logilab-common-e6393a86a17f723b2c438e3326ad553dae5e3134.tar.gz |
new @locked decorator
Diffstat (limited to 'decorators.py')
-rw-r--r-- | decorators.py | 18 |
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 + |