我有一个 Python 脚本,它从另一个线程启动一个线程。这是一个学习练习,以实际实现杀死 python 线程的能力,这在我正在编写的应用程序中确实有用。忽略红鲱鱼,线程FirstThread
启动线程SecondThread
,出于我们的目的,该线程陷入循环并且没有资源可以释放。考虑:
import threading
import time
class FirstThread (threading.Thread):
def run(self):
b = SecondThread()
b.daemon = True
b.start()
time.sleep(3)
print("FirstThread going away!")
return True
class SecondThread (threading.Thread):
def run(self):
while True:
time.sleep(1)
print("SecondThread")
a = FirstThread()
a.daemon = True
a.start()
print("Waiting 5 seconds.")
time.sleep(5)
print("Done waiting")
虽然FirstThread
确实打印“FirstThread 消失了!” 3 秒后,如预期的那样,SecondThread
继续将“SecondThread”打印到标准输出。我预计SecondThread
会被破坏,FirstThread
因为它是一个守护线程。那么为什么SecondThread
它的环境(FirstThread)已经被破坏了,它仍然存在呢?