我有如下代码:
除了更多的属性,例如
有没有更简练的定义这些属性的方法?
到目前为止,我想到的最好的方法是这样的:
class SomeSharedData(object):
def __init__(self):
self._lock = RLock()
self._errors = 0
@property
def errors(self):
with self._lock:
return self._errors
@errors.setter
def errors(self, value):
with self._lock:
self._errors = value
除了更多的属性,例如
errors
之外。我的目标是易于使用,而不是效率,因此过多的锁定是可以接受的。有没有更简练的定义这些属性的方法?
到目前为止,我想到的最好的方法是这样的:
class thread_safe_property(object):
def __init__(self, name=None):
self.name = name
def __get__(self, obj, objtype):
with obj._lock:
return getattr(obj, self.name)
def __set__(self, obj, val):
with obj._lock:
setattr(obj, self.name, val)
class SomeSharedData(object):
def __init__(self):
self._lock = RLock()
self._errors = 0
errors = thread_safe_property('_errors')
有什么想法?更好的方法吗?
无论是原始代码还是新方法,在像 data.errors += 1
这样的语句上都存在可能的竞态条件,但我很少需要执行这些操作,因此我会在必要时添加解决方法。
谢谢!
errors
属性的 getter 没有正确地缩进。 - Niklas R