作成時に生成されるワーカー スレッドによって継続的に更新されるクラスが必要な場合があります。基本的には次のようになります。
class MyWidget:
def __init__(self):
self.blah = None
self.thread = MyThread(self)
self.thread.start()
def update(self, blah):
self.blah = blah
class MyThread(threading.Thread):
def __init__(self, widget):
self.widget = widget
def run(self):
while True:
time.sleep(1)
blah = poll()
self.widget.update(blah)
MyWidget
が不要になったときにスレッドが確実に終了するように、これを設計する安全な方法が必要です。上記のコードの問題は、MyWidget
が によって生き続けているため、 が死ぬことはないということですMyThread
。MyThread
にaweakref.ref
を与えMyWidget
、参照が終了したときにループを壊すことでそれを修正できますが、過去にこれを行わなかったという間違いを犯しました。
私が本当に欲しいのは、他のすべてのものと一緒にガベージコレクションを取得するスレッドです。すなわち。スレッドの参照グラフとメイン スレッドの参照グラフが切り離されている場合に強制終了されるスレッド。そのような獣を書くことは可能でしょうか?それらはすでに存在しますか?