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