A veces deseo una clase que se actualice continuamente mediante un hilo de trabajo que genere cuando se cree. Básicamente así:En python, ¿hay alguna manera de hacer que los hilos mueran cuando ya no hay una referencia a ellos?
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)
quiero una manera segura para el diseño de este modo que estoy seguro de que el hilo se muere cuando el MyWidget
ya no se necesita. El problema con el código anterior es que el MyWidget
nunca morirá porque se mantiene vivo con el MyThread
. Puedo solucionarlo dando el MyThread
a weakref.ref
al MyWidget
y rompiendo el ciclo cuando la referencia muere, pero he cometido el error de no hacer esto en el pasado.
Lo que realmente me gustaría son los hilos que recogen la basura junto con todo lo demás. es decir. Un hilo que se elimina cuando el gráfico de referencia y el gráfico de referencia del hilo principal son disjuntos. ¿Sería posible escribir tal bestia? ¿Ya existen?