当丢失对Python线程的所有引用时会发生什么?

2024-10-11 16:26:01 发布

您现在位置:Python中文网/ 问答频道 /正文

长话短说。。。当对threading.Thread对象的所有引用都丢失时会发生什么情况,例如在这个函数中:

def myfunc():
    def thread_func():
        while True:
            do_useful_things()
    thethread = threading.Thread(target = thread_func)
    thethread.run()
    return

它看起来像是线程继续运行,但它的行为很奇怪,我想知道是否有奇怪的事情发生,因为垃圾回收器不正确地删除了它或其他什么。在

或者,即使生成线程没有主动跟踪它们本身,线程是否正常地继续(我知道threading本身有办法获得活动线程)?在


Tags: 对象函数truedef情况myfunc线程do
1条回答
网友
1楼 · 发布于 2024-10-11 16:26:01

我不是线程方面的专家,但是据我所知,如果你对它调用thethread.run,它在当前线程中执行(执行的主线程因此阻塞了执行),然后就死了。在这种情况下,它将在函数结束后作为该函数内部的局部变量进行垃圾回收。在

相反,如果您使用thethread.start(),它将被发送到它自己的一个单独的线程中执行。在本例中,threading模块中的there's a mapping始终保留对它的引用:

_active = {}    # maps thread id to Thread object

所以,在这种情况下,总是至少有一个引用您创建的线程。它在完成工作后最终会被移除。在

相关问题 更多 >

    热门问题