時には、作成時に生成されるワーカースレッドによって継続的に更新されるクラスが必要です。基本的には次のように:私はMyWidget
が不要になったときに、スレッドが死ぬん確信しているようにPythonでは、もはやそれらへの参照がなくなったときにスレッドが消滅する方法はありますか?
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
がMyThread
によって生きているために死ぬことはないということです。私はMyThread
をweakref.ref
にMyWidget
に与え、参照が消えるとループを解除することで修正できますが、過去にこれをやっていない間違いをしました。
私が本当に好きなのは、他のすべてと一緒にガベージコレクションが行われるスレッドです。すなわち、参照グラフとメインスレッドの参照グラフとが非同期である場合には、そのスレッドは強制終了されます。そのような獣を書くことは可能でしょうか?彼らはすでに存在していますか?