File: synchronized.py

package info (click to toggle)
python-enthoughtbase 3.0.5-1
  • links: PTS, VCS
  • area: main
  • in suites: squeeze
  • size: 960 kB
  • ctags: 1,034
  • sloc: python: 6,104; makefile: 9; sh: 5
file content (30 lines) | stat: -rw-r--r-- 812 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
""" A decorator for making methods thread-safe via an object-scope lock. """


def synchronized(lock_attribute='_lk'):
    """ A factory for decorators for making methods thread-safe. """

    def decorator(fn):
        """ A decorator for making methods thread-safe. """

        def wrapper(self, *args, **kw):
            """ The method/function wrapper. """

            lock = getattr(self, lock_attribute)
            try:
                lock.acquire()
                result = fn(self, *args, **kw)

            finally:
                lock.release()
            
            return result

        wrapper.__doc__  = fn.__doc__
        wrapper.__name__ = fn.__name__
        
        return wrapper

    return decorator

#### EOF ######################################################################