Python线程生存期和处理

2024-05-29 06:54:03 发布

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

我已经为python程序创建了一个GUI,它可以启动4种不同的独立计算。我希望GUI在后台进行计算时能够响应,因此我为每次计算创建一个新线程。我还保留了一些关于线程的附加信息(例如,如果它应该中止计算)

每个计算也可以运行多次(中止后或更改某些设置后),这意味着可以为每个计算创建多个线程

我不确定是否必须使用.join()显式连接每个线程,或者该线程是否在函数完成执行后终止并自动连接。如果程序终止后没有自动加入主线程,我不希望在程序结束时有100个线程

我知道我可以使用thread.is_alive()来检查线程是否已完成执行,但如果不需要的话,我真的不想编写某种线程垃圾收集器(它必须在自己的新线程中运行…唉)。我在谷歌上搜索了一下,但在没有显式使用.join()的情况下,找不到关于线程生存期的文档


Tags: 函数程序信息is情况gui线程thread
1条回答
网友
1楼 · 发布于 2024-05-29 06:54:03

主线程可以退出,如果它们是守护进程线程,它们将被不干净地杀死

线程可以随时退出,在这种情况下,连接将立即返回

如果它们不是守护进程线程,则会有一个隐式连接——但除非您要求它们终止,否则它们将继续,直到它们所做的一切完成为止

文档说:“当只剩下守护进程线程时,整个Python程序就会退出”

和:注意:守护进程线程在关闭时会突然停止。他们的资源(如打开的文件、数据库事务等)可能无法正常释放。如果希望线程正常停止,请将其设为非守护进程,并使用适当的信号机制,如事件

发件人:https://docs.python.org/3/library/threading.html

但是如果您要求线程以合作方式终止,那么您应该加入所有线程,因为您希望确保它们干净地完成。这确实让您有责任设计线程,以便它们在被请求时及时终止(即不过度挖掘用户)——但线程就是这样工作的,不是吗

相关问题 更多 >

    热门问题