1

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

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

4

1 回答 1

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)
于 2012-04-12T08:20:07.713 回答