长话短说......当threading.Thread
对象的所有引用都丢失时会发生什么,例如在此函数中:
def myfunc():
def thread_func():
while True:
do_useful_things()
thethread = threading.Thread(target = thread_func)
thethread.run()
return
看起来线程仍在继续,但它表现得很奇怪,我想知道是否会发生奇怪的事情,因为垃圾收集器不正确地删除了它或什么的。
或者线程继续正常,即使产生线程没有主动跟踪它们(我知道threading
本身有获取活动线程的方法)?
答案 0 :(得分:2)
我不是线程专家,但据我所知,如果你在它上面调用thethread.run
,它会在当前线程(执行的主线程,从而阻止执行)中执行,然后死亡。在这种情况下,它将在函数结束后收集垃圾,作为该函数内的局部变量。
相反,如果你使用thethread.start()
,它会被发送到它自己执行的单独线程。在这种情况下,threading
模块中的there's a mapping始终保持对它的引用:
_active = {} # maps thread id to Thread object
因此,在这种情况下,始终至少有一个对您创建的主题的引用。这最终会在它完成工作后被删除。