Мне нужно запустить столько потоков класса Observer, сколько есть элементов в списке dirlist. Когда я запускаю консоль python, все работает правильно.
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()
Но когда я пытаюсь сделать это из главного потока, который должен порождать потоки Observer, я получаю ошибки.
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()
Вызов Master.start
приводит к:
RuntimeError: thread.__init__() not called
Это выглядит странно для меня.
Я не могу понять, в чем разница между обоими случаями.
Может ли кто-нибудь выяснить решение моей проблемы?
Как-то после этого не возникает ошибка, и я не понимаю, почему.
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()