Python 为啥不建议使用 thread模块?
概述
Python 提供了多個模塊來支持多線程編程,包括 thread、threading和 Queue 模塊等。程序是可以使用 thread 和 threading 模塊來創建于管理線程。thread 模塊提供了基本的線程和鎖定支持;而 threading 模塊提供了更高級別、功能更全面的線程管理。使用 Queue 模塊,用戶可以創建一個隊列數據結構,用于在多線程之間進行共享。
避免使用 thread
為啥 Python 推薦使用更高級別的 threading 來創建線程而不推薦使用 thread 來創建呢,主要原因有以下幾點:
- 1.threading 模塊更加先進,有更好的線程支持,并且 thread模塊中的一些屬性會和 threading 模塊有沖突。
- 2.低級別的 thread 模塊擁有的同步原語很少(實際上只有一個),而 threading 模塊則有很多。
- 3.thread 模塊對于進行何時退出沒有控制。當主線程結束時,所有其他線程也都強制結束,不會發出警告或者進行適當的清理。如前所述,至少 threading 模塊能確保重要的子線程在進行退出前結束。
- 4.一個很重要的原因是 thread 不支持守護線程的概念。當主線程退出時,所有子線程都將終止,不管它們是否仍在工作。如果你不希望發生這種行為,就需要引入守護線程的概念了。
守護線程
threading 支持守護線程,其工作方式是:守護線程一般是一個等待客戶端請求服務的服務器。如果沒有客戶端請求,守護線程是空閑的。如果把一個線程設置為守護線程,就表示這個線程是不重要的,進程退出時不需要等待這個線程執行完成。
如果主線程準備退出時,不需要等待某些子線程完成,就可以為這些子線程設置守護線程標記。該標記為真時,表示該線程不重要,或者說該線程只是用來等待客戶端請求而不做任何其他事情。
要將一個線程設置為守護線程,需要在啟動線程之前執行如下賦值語句:thread.daemon = True,要檢查線程是否為守護狀態,只需要檢查這個值即可。
Python 為了強調避免使用 thread 模塊,在 Python3 中該模塊被重命名為_thread,所以在創建的任何多線程應用都應該使用 threading 模塊或其他更高級別的模塊。
總結
以上是生活随笔為你收集整理的Python 为啥不建议使用 thread模块?的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Qt状态机框架介绍(二)
- 下一篇: Qt IFW框架简介