2013-07-25 37 views
0

我有一个Python脚本从另一个线程启动线程。这是一个学习练习,以实际实现kill a python thread的能力,它在我正在编写的应用程序中有用处。忽略红鲱鱼,线程FirstThread启动线程SecondThread,这是我们的目的被陷入循环,并没有资源释放。考虑:为什么daemon线程在其环境被破坏时不会死亡?

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”到stdout。我预计SecondThread被销毁,FirstThread被销毁,因为它是a daemon thread。那么为什么SecondThread即使其环境(FirstThread)已被破坏,仍然存在?

回答

1

线程本质上不是分层的。 AFAIK,一个线程维护它创建的环境的封闭,但就是这样。所有线程均由进程拥有。 A daemon线程只是一个在应用程序退出之前不会连接的线程。总之,在你的例子中FirstThreadSecondThread之间没有任何联系。