我有一个代表一块硬件的类。我只希望一个线程能够一次控制它,但是如果花费的时间过长,我也希望能够从资源中踢出另一个线程。我认为最好的方法是跟踪类中的所有者线程ID,如果从另一个线程访问任何属性,则抛出异常。
这似乎是一个可以用元类解决的问题 - 我需要以某种方式拦截属性检索,并在线程ID错误时抛出异常?
答案 0 :(得分:1)
您不一定需要元类,您可以使用__getattribute__
:
class Hardware(object):
def __getattribute__(self, attr):
if super(Hardware, self).__getattribute__(owner_id) != current_thread_id:
raise YourAccessError # NOT AttributeError
return super(Hardware, self).__getattribute__(attr)