日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > python >内容正文

python

python3多线程编程_Python 3-多线程编程

發(fā)布時(shí)間:2024/7/19 python 73 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python3多线程编程_Python 3-多线程编程 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。