长话短说。。。当对threading.Thread
对象的所有引用都丢失时会发生什么情况,例如在这个函数中:
def myfunc():
def thread_func():
while True:
do_useful_things()
thethread = threading.Thread(target = thread_func)
thethread.run()
return
它看起来像是线程继续运行,但它的行为很奇怪,我想知道是否有奇怪的事情发生,因为垃圾回收器不正确地删除了它或其他什么。在
或者,即使生成线程没有主动跟踪它们本身,线程是否正常地继续(我知道threading
本身有办法获得活动线程)?在
我不是线程方面的专家,但是据我所知,如果你对它调用
thethread.run
,它在当前线程中执行(执行的主线程因此阻塞了执行),然后就死了。在这种情况下,它将在函数结束后作为该函数内部的局部变量进行垃圾回收。在相反,如果您使用
thethread.start()
,它将被发送到它自己的一个单独的线程中执行。在本例中,threading
模块中的there's a mapping始终保留对它的引用:所以,在这种情况下,总是至少有一个引用您创建的线程。它在完成工作后最终会被移除。在
相关问题 更多 >
编程相关推荐