Sch*_*ote 5 python multithreading python-3.x
长话短说......当对一个threading.Thread对象的所有引用都丢失时会发生什么,例如在这个函数中:
def myfunc():
def thread_func():
while True:
do_useful_things()
thethread = threading.Thread(target = thread_func)
thethread.run()
return
Run Code Online (Sandbox Code Playgroud)
看起来线程一直在运行,但它的行为很奇怪,我想知道是否会发生奇怪的事情,因为垃圾收集器不正确地删除了它或其他什么。
或者即使生成线程本身没有主动跟踪它们,线程是否会正常继续(我知道threading它自己有获取活动线程的方法)?
我不是线程方面的专家,但据我所知,如果您调用thethread.run它,它会在当前线程中执行(执行的主线程,从而阻止执行),然后死亡。在这种情况下,它会在函数结束后作为该函数内的局部变量被垃圾收集。
相反,如果您使用thethread.start()它,它会被发送到它自己的单独线程中执行。在这种情况下,模块中有一个映射threading始终保留对其的引用:
_active = {} # maps thread id to Thread object
Run Code Online (Sandbox Code Playgroud)
因此,在这种情况下,始终至少有一个对您创建的线程的引用。它最终会在执行工作后被删除。