Python中的主线程
我有一个很长的程序,里面有很多线程。我创建了一个示例,简短的代码,您可以在其中确切地看到问题所在Python中的主线程,python,multithreading,Python,Multithreading,我有一个很长的程序,里面有很多线程。我创建了一个示例,简短的代码,您可以在其中确切地看到问题所在 from threading import Thread, active_count import time def func(x): time.sleep(x) print(active_count()) print(active_count()) t = Thread(target=func, name="thread", args=(5,)) t.start() print
from threading import Thread, active_count
import time
def func(x):
time.sleep(x)
print(active_count())
print(active_count())
t = Thread(target=func, name="thread", args=(5,))
t.start()
print("main thread finished")
简单地说,我不明白为什么主线程在执行最后一个print语句后仍然处于活动状态
请有人给我解释一下为什么会这样,主线程和其他线程之间的机制是什么?谢谢你你必须习惯像C这样的编译语言,退出主例程会毁掉一切 在Python中,到达主线程的末尾不会破坏其他线程 事实上,您无法真正销毁线程,这必须是一项协作任务(例如:设置标志或发送事件以便线程理解它必须退出其循环:在您的情况下,您可能需要分段
时间.sleep()
并检查其间的标志,以便在需要时从线程返回)
因此,当主线程结束执行时,python解释器将等待所有线程完成,然后退出
请注意,最好使用
join
方法(t.start()
)具体化此等待。要实现所需的功能,需要在启动线程之前将其标记为守护进程:
t = Thread(...)
t.daemon = True
t.start()
见文件:
线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出
主线程不是守护进程,因此将生成的线程标记为守护进程可以让您在主线程结束后立即退出程序。不,主线程会等待所有线程完成,即使您没有使用join。