Necesito ejecutar tantos hilos de clase Observer como elementos hay en la lista dirlist. Cuando lo ejecuto, la consola de python funciona bien."RuntimeError: thread .__ init __() no se llama" cuando subclassing threading.Thread
class Observer(Thread):
def run(self):
naptime = random.randint(1,10)
print(self.name + ' starting, running for %ss.' % naptime)
time.sleep(naptime)
print(self.name + ' done')
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
Pero cuando trato de hacerlo desde un hilo principal que se supone para desovar los hilos de observadores que recibo errores.
class Master(Thread):
def __init__(self, dirlist):
self.dirlist = dirlist
def run(self):
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
while True:
time.sleep(3600)
master_thread = Master(dirlist)
master_thread.start()
la llamada a Master.start
resultados en:
RuntimeError: thread.__init__() not called
Esto parece extraño para mí.
No puedo entender cuál es la diferencia entre ambos casos.
¿Alguien puede encontrar una solución a mi problema?
De alguna manera el seguimiento no produce un error, y no entiendo por qué.
class Master(Thread):
def set(self, dirlist):
self.dirlist = dirlist
def run(self):
observers = {}
for d in dirlist:
observers[d] = Observer()
observers[d].start()
while True:
time.sleep(3600)
master_thread = Master()
master_thread.set(dirlist)
master_thread.start()
¿qué tal si llamamos a Thread .__ init__ como se dice? – JBernardo
Debería ser 'for d in self.dirlist:'. Tal como está, 'for d in dirlist:' se refiere a un global. Para que sea una [muestra] adecuada (http://sscce.org/), el código debe estar completo, lo que significa que debe proporcionar una implementación mínima de 'Observer', y debe ser solo un código para que pueda usarse directamente (que significa que no copie el prompt y la sangría de Python del intérprete). Edita tu pregunta para arreglar la muestra. Por último, ¿con qué versión de Python estás trabajando? – outis