如何从类中访问任何数据抛出异常?

时间:2012-04-12 08:04:36

标签: python multithreading

我有一个代表一块硬件的类。我只希望一个线程能够一次控制它,但是如果花费的时间过长,我也希望能够从资源中踢出另一个线程。我认为最好的方法是跟踪类中的所有者线程ID,如果从另一个线程访问任何属性,则抛出异常。

这似乎是一个可以用元类解决的问题 - 我需要以某种方式拦截属性检索,并在线程ID错误时抛出异常?

1 个答案:

答案 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)