ハードウェアを表すクラスがあります。一度に1つのスレッドだけがそれを制御できるようにしたいのですが、時間がかかりすぎる場合は、別のスレッドをリソースからキックオフできるようにしたいのです。これを行う最善の方法は、クラス内の所有者スレッドIDを追跡し、別のスレッドからアクセスされたプロパティがある場合は例外をスローすることだと思います。
これはメタクラスで解決できる問題のようです-どういうわけか属性の取得をインターセプトし、スレッドIDが間違っている場合は例外をスローする必要がありますか?
ハードウェアを表すクラスがあります。一度に1つのスレッドだけがそれを制御できるようにしたいのですが、時間がかかりすぎる場合は、別のスレッドをリソースからキックオフできるようにしたいのです。これを行う最善の方法は、クラス内の所有者スレッドIDを追跡し、別のスレッドからアクセスされたプロパティがある場合は例外をスローすることだと思います。
これはメタクラスで解決できる問題のようです-どういうわけか属性の取得をインターセプトし、スレッドIDが間違っている場合は例外をスローする必要がありますか?
必ずしもメタクラスは必要ありません。次を使用できます__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)