0

我有一个 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)已经被破坏了,它仍然存在呢?

4

1 回答 1

1

线程本质上不是分层的。AFAIK,一个线程在它创建的环境中维护一个闭包,但就是这样。所有线程都归一个进程所有。daemon线程只是在应用程序退出之前不会加入的线程。简而言之,在您的示例中FirstThread和之间没有联系。SecondThread

于 2013-07-25T11:51:38.203 回答