Я создаю учебник для моего класса по многопоточности. У меня есть этот простой код ниже, который инициализирует 3 потока. Нить 1,2,3.
Тема 1: простой таймер, который ждет 4 секунды
Тема 2: простой таймер, который ждет 2 секунды
Поток 3: простой таймер, который ждет 6 секунд, но является демоном.
Основная программа заканчивается до окончания 3-го потока. Поскольку 3-й поток был deamon, я думал, что он будет убит. Таким образом, мне интересно, что не так с моим кодом или с блокнотом jupyter. Вот мой код.
import threading
import logging
import time
def threadLauncher1(name, delay):
logging.info("Thread %s \t : Starting" %name)
time.sleep(delay)
logging.info("Thread %s \t : Finishing" %name)
class threadLauncher2(threading.Thread):
def __init__(self, name, delay):
super().__init__()
self.name = name
self.delay = delay
def run(self):
logging.info("Thread %s \t : Starting" % self.name)
time.sleep(self.delay)
logging.info("Thread %s \t : Finishing" % self.name)
if __name__ == "__main__":
format = "%(asctime)s: %(message)s"
logging.basicConfig(format=format, level=logging.INFO, datefmt="%H:%M:%S")
threadLauncherFunction1 = threading.Thread(target=threadLauncher1, args=("Timer 1", 4,))
threadLauncherFunction1.start()
threadLauncherFunction2 = threadLauncher2("Timer 2", 2)
threadLauncherFunction2.start()
threadLauncherFunction3 = threadLauncher2("Timer 3", 6)
threadLauncherFunction3.setDaemon(True)
threadLauncherFunction3.start()
logging.info("Daemon setting is %s on %s" % (str(threadLauncherFunction3.isDaemon()), threadLauncherFunction3.name))
threadLauncherFunction1.join()
logging.info("Waited until Timer 1 had finished")
logging.info("Timer3 should not be able to finish, since it is a daemon Thread")
Я попытался заменить третий поток более явной функцией.
class threadLauncher3(threading.Thread):
def __init__(self, name, delay):
super().__init__()
self.name = name
self.delay = delay
def run(self):
while True:
logging.info('Thread %s running.' %self.name)
time.sleep(self.delay)
Как и ожидалось из предыдущих результатов, выходное значение:
13:19:37: Thread Timer 1 : Starting
13:19:37: Thread Timer 2 : Starting
13:19:37: Thread Timer 3 running.
13:19:37: Daemon setting is True on Timer 3
13:19:38: Thread Timer 3 running.
13:19:39: Thread Timer 2 : Finishing
13:19:39: Thread Timer 3 running.
13:19:40: Thread Timer 3 running.
13:19:41: Thread Timer 1 : Finishing
13:19:41: Waited until Timer 1 had finished
13:19:41: Timer3 should not be able to finish, since it is a daemon Thread
13:19:41: Thread Timer 3 running.
13:19:42: Thread Timer 3 running.
13:19:43: Thread Timer 3 running.
To infinity
Эти два кода отлично работают на интерпретаторе моего компьютера.