【发布时间】:2019-02-01 08:39:26
【问题描述】:
根据文档:https://docs.python.org/3/library/threading.html
可以将线程标记为“守护线程”。这个标志的意义在于,当只剩下守护线程时,整个 Python 程序就退出了。初始值继承自创建线程。该标志可以通过 daemon 属性或 daemon 构造函数参数设置。
示例代码:
thread = threading.Thread(target=MultiHandler().network, args=(conn, data), daemon=True)
thread.start()
参考许多其他 StackOverflow 答案,我不清楚当主线程调用 sys.exit() 时是否强制关闭守护线程
【问题讨论】:
-
当一个程序退出时,它的所有子线程都会被杀死。非守护进程的线程会阻止程序退出,从而防止它们自己的破坏。
-
@zwer 在这种情况下,如果我的线程是非守护进程,我是否仍然需要调用
join()来等待线程,然后再调用sys.exit()? -
你没有,但是你失去了对程序退出的控制。如果你不管理优雅的退出,你最终会得到你的主线程finishing,然后挂在那里等待其他线程完成而无法启动。
-
sys.exit()的文档对多线程程序不太清楚,但如果仔细观察,您会发现它说sys.exit()除了抛出异常之外什么都不做。因此,它只会终止调用它的一个线程,并且只有当该线程没有处理程序来吞下异常时。
标签: python python-3.x multithreading