mirror of
https://github.com/Mikaela/Limnoria.git
synced 2025-03-01 12:00:41 +01:00
Changed Synchronized to make attributes (and changing the attributes' names) more maintainable.
This commit is contained in:
parent
23c0d23a01
commit
a1e707caa2
@ -64,29 +64,32 @@ class Acquire(object):
|
|||||||
|
|
||||||
|
|
||||||
class Synchronized(type):
|
class Synchronized(type):
|
||||||
|
METHODS = '__synchronized__'
|
||||||
|
LOCK = '_Synchronized_rlock'
|
||||||
def __new__(cls, name, bases, dict):
|
def __new__(cls, name, bases, dict):
|
||||||
sync = set()
|
sync = set()
|
||||||
for base in bases:
|
for base in bases:
|
||||||
if hasattr(base, '__synchronized__'):
|
if hasattr(base, Synchronized.METHODS):
|
||||||
sync.update(base.__synchronized__)
|
sync.update(getattr(base, Synchronized.METHODS))
|
||||||
if '__synchronized__' in dict:
|
if Synchronized.METHODS in dict:
|
||||||
sync.update(dict['__synchronized__'])
|
sync.update(dict[Synchronized.METHODS])
|
||||||
if sync:
|
if sync:
|
||||||
def synchronized(f):
|
def synchronized(f):
|
||||||
def g(self, *args, **kwargs):
|
def g(self, *args, **kwargs):
|
||||||
self._Synchronized_rlock.acquire()
|
lock = getattr(self, Synchronized.LOCK)
|
||||||
|
lock.acquire()
|
||||||
try:
|
try:
|
||||||
f(self, *args, **kwargs)
|
f(self, *args, **kwargs)
|
||||||
finally:
|
finally:
|
||||||
self._Synchronized_rlock.release()
|
lock.release()
|
||||||
return changeFunctionName(g, f.func_name, f.__doc__)
|
return changeFunctionName(g, f.func_name, f.__doc__)
|
||||||
for attr in sync:
|
for attr in sync:
|
||||||
if attr in dict:
|
if attr in dict:
|
||||||
dict[attr] = synchronized(dict[attr])
|
dict[attr] = synchronized(dict[attr])
|
||||||
original__init__ = dict.get('__init__')
|
original__init__ = dict.get('__init__')
|
||||||
def __init__(self, *args, **kwargs):
|
def __init__(self, *args, **kwargs):
|
||||||
if not hasattr(self, '_Synchronized_rlock'):
|
if not hasattr(self, Synchronized.LOCK):
|
||||||
self._Synchronized_rlock = threading.RLock()
|
setattr(self, Synchronized.LOCK, threading.RLock())
|
||||||
if original__init__:
|
if original__init__:
|
||||||
original__init__(self, *args, **kwargs)
|
original__init__(self, *args, **kwargs)
|
||||||
else:
|
else:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user