python3多线程编程_Python 3-多线程编程
Python 3-多線程編程
運行多個線程類似于同時運行多個不同的程序,但具有以下優點-
進程中的多個線程與主線程共享相同的數據空間,因此與單獨的進程相比,可以更輕松地共享信息或彼此通信。
線程有時被稱為輕量級進程,它們不需要太多的內存開銷。它們比流程便宜。
線程具有開始,執行序列和結論。它具有一個指令指針,可跟蹤其上下文中當前正在運行的位置。
可以先占(中斷)。
可以在其他線程正在運行時將其暫時置于暫掛狀態(也稱為休眠)-這稱為yield。
有兩種不同的線程-
內核線程
用戶線程
內核線程是操作系統的一部分,而用戶空間線程未在內核中實現。
有兩個模塊支持在Python3中使用線程-
_線
穿線
線程模塊已被“棄用”了很長時間。鼓勵用戶改用線程模塊。因此,在Python 3中,模塊“線程”不再可用。但是,由于Python3中的向后兼容性,它已重命名為“ _thread”。
開始一個新線程
要生成另一個線程,您需要調用線程模塊中可用的以下方法-
通過此方法調用,可以快速有效地在Linux和Windows中創建新線程。
方法調用立即返回,子線程啟動,并使用傳遞的args列表調用函數。當函數返回時,線程終止。
在這里, args是參數的元組;使用一個空的元組調用函數而不傳遞任何參數。 kwargs是關鍵字參數的可選字典。
例
輸出
執行以上代碼后,將產生以下結果-
程序陷入無限循環。您將必須按ctrl-c才能停止
盡管它對于低級線程非常有效,但是與更新的線程模塊相比,線程模塊非常有限。
線程模塊
與上一節中討論的線程模塊相比, Python 2.4中包含的更新的線程模塊為線程提供了更強大的高級支持。
threading模塊暴露出線程模塊的所有方法,并提供了一些額外的方法-
threading.activeCount() -返回活動的線程對象數。
threading.currentThread() -返回調用者的線程控件中線程對象的數量。
threading.enumerate() -返回當前處于活動狀態的所有線程對象的列表。
除了這些方法之外,線程模塊還具有實現線程的Thread類。 Thread類提供的方法如下-
run() -run()方法是線程的入口點。
start() -start()方法通過調用run方法來啟動線程。
join([time]) -join()等待線程終止。
isAlive() -isAlive()方法檢查線程是否仍在執行。
getName() -getName()方法返回線程的名稱。
setName() -setName()方法設置線程的名稱。
使用線程模塊創建線程
要使用線程模塊實現新線程,您必須執行以下操作-
定義Thread類的新子類。
重寫__init __(self [,args])方法以添加其他參數。
然后,重寫run(self [,args])方法以實現線程在啟動時應執行的操作。
一旦創建了新的Thread子類,就可以創建它的實例,然后通過調用start()來啟動新線程,該start()依次調用run()方法。
例
結果
當我們運行上面的程序時,它將產生以下結果-
同步線程
Python隨附的線程模塊包括一種易于實現的鎖定機制,可讓您同步線程。通過調用Lock()方法創建一個新鎖,該方法返回新鎖。
新鎖對象的acquire(blocking)方法用于強制線程同步運行。可選的阻塞參數使您可以控制線程是否等待獲取鎖。
如果將blocking設置為0,則如果無法獲取鎖,則線程立即返回0值,如果獲取鎖,則線程返回1。如果將阻塞設置為1,則線程將阻塞并等待釋放鎖。
新的鎖對象的release()方法用于在不再需要時釋放鎖。
例
輸出
執行以上代碼后,將產生以下結果-
多線程優先級隊列
隊列模塊允許您創建一個可以容納特定數量項目的新隊列對象。有以下方法來控制隊列-
get() -get()從隊列中刪除并返回一個項目。
put() -put將項目添加到隊列。
qsize() -qsize()返回隊列中當前的項目數。
empty() -如果隊列為空,則Empty()返回True;否則,返回true。否則為False。
full() -如果隊列已滿,則full()返回True;否則,返回true。否則為False。
例
輸出
執行以上代碼后,將產生以下結果-
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的python3多线程编程_Python 3-多线程编程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: docker常用命令_docker常用命
- 下一篇: MySQL Workbench运行脚本