Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 当主线程调用sys.exit()时,守护进程线程是否被杀死?_Python_Python 3.x_Multithreading - Fatal编程技术网

Python 当主线程调用sys.exit()时,守护进程线程是否被杀死?

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()

根据文件:

线程可以标记为“守护线程”。此标志的意义在于,当只剩下守护进程线程时,整个Python程序将退出。初始值从创建线程继承。可以通过daemon属性或daemon构造函数参数设置该标志

示例代码:

thread = threading.Thread(target=MultiHandler().network, args=(conn, data), daemon=True)
thread.start()

参考许多其他StackOverflow答案,我不清楚当主线程调用
sys.exit()

时是否强制关闭守护进程线程


当一个程序退出时,它的所有子线程都会随之终止。非守护线程将阻止程序退出,从而防止其自身的破坏。-zwer


简而言之,yes守护进程线程不会阻止程序退出,因此它们将在退出时被终止。

当程序退出时,其所有子线程都将被终止。非守护进程的线程将阻止程序退出,从而防止其自身的破坏。@zwer在这种情况下,如果我的线程不是守护进程,我是否仍必须调用
join()
以等待线程,然后再调用
sys.exit()
?如果不这样做,则会失去对程序退出的控制。如果您不管理优雅的退出,那么您的主线程将结束,然后挂在那里等待其他线程完成,而没有任何方法可以促使它完成。
sys.exit()
除了抛出异常外,什么都不做。因此,它只会终止调用它的一个线程,并且只有当该线程没有接受异常的处理程序时才会终止。