Python中关于Thread的一点小知识

发布网友

我来回答

1个回答

热心网友

Python2.7下,对于多线程结束后的线程状态,通常我们理所当然地认为线程在完成任务后会被销毁。然而,同事的观点却有所不同,他指出线程执行完成任务后虽退出,但实际上并没有被销毁。Python自身并未提供销毁线程的功能,线程销毁需通过操作系统接口完成。

在实际使用`threading.Thread`时,我们通过`start()`开始线程任务,并使用`join()`等待线程结束。查看cpython中`threading.Thread`源码,`join()`方法说明中并未明确指出线程销毁问题。为了验证,我们编写了测试代码,在CentOS 7 x系统下运行。

初始查看线程数为3,执行线程1后,再次查看线程数变为2,证明线程在任务结束后自动回收并销毁。

关于执行多线程任务时,其中一个线程执行`sys.exit()`是否会导致整个进程退出,同事认为会退出,而我和另一位同事对此持怀疑态度。通过编写示例代码,结果表明,直到线程2运行结束,进程才退出,线程1中的`sys.exit()`并未引起进程的退出。

深入分析`sysmodule.c`源码,可以看到返回值总是NULL,但在`exit_code`不为0时,会设置`PyExc_SystemExit`。通过全局搜索`PyExc_SystemExit`,在`_threadmodule.c`中找到了相关代码。实际上,线程正常退出也会设置`PyExc_SystemExit`,因此,在线程中执行`sys.exit()`并不会导致整个进程退出。

以上观点仅为个人见解,如有错误之处,欢迎指正,感谢阅读。

声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com