Python 当主线程调用sys.exit()时,守护进程线程是否被杀死?
根据文件: 线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出。初始值从创建线程继承。可以通过daemon属性或daemon构造函数参数设置该标志 示例代码:Python 当主线程调用sys.exit()时,守护进程线程是否被杀死?,python,python-3.x,multithreading,Python,Python 3.x,Multithreading,根据文件: 线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出。初始值从创建线程继承。可以通过daemon属性或daemon构造函数参数设置该标志 示例代码: thread = threading.Thread(target=MultiHandler().network, args=(conn, data), daemon=True) thread.start() 参考许多其他StackOverflow答案,我不清楚当主线程调用sys.exit()
thread = threading.Thread(target=MultiHandler().network, args=(conn, data), daemon=True)
thread.start()
参考许多其他StackOverflow答案,我不清楚当主线程调用
sys.exit()
时是否强制关闭守护进程线程
当一个程序退出时,它的所有子线程都会随之终止。非守护线程将阻止程序退出,从而防止其自身的破坏。-zwer
简而言之,yes守护进程线程不会阻止程序退出,因此它们将在退出时被终止。当程序退出时,其所有子线程都将被终止。非守护进程的线程将阻止程序退出,从而防止其自身的破坏。@zwer在这种情况下,如果我的线程不是守护进程,我是否仍必须调用
join()
以等待线程,然后再调用sys.exit()
?如果不这样做,则会失去对程序退出的控制。如果您不管理优雅的退出,那么您的主线程将结束,然后挂在那里等待其他线程完成,而没有任何方法可以促使它完成。sys.exit()
除了抛出异常外,什么都不做。因此,它只会终止调用它的一个线程,并且只有当该线程没有接受异常的处理程序时才会终止。