【讀書筆記】_多線程編程

使用多線程編程和一個(gè)共享的數(shù)據(jù)結(jié)構(gòu)如 Queue(一種多線程隊(duì)列數(shù)據(jù)結(jié)構(gòu)锥余,先進(jìn)先出/先進(jìn)后出)

1.1棕孙、多線程的構(gòu)成方式:

1.1.1遮婶、UserRequestThread: 負(fù)責(zé)讀取客戶的輸入蹋艺, 可能是一個(gè) I/O 信道儒恋。程序可能創(chuàng)建多個(gè)線程部凑,每個(gè)客戶一個(gè),請(qǐng)求會(huì)被放入隊(duì)列中碧浊。

1.1.2、RequestProcessor: 一個(gè)負(fù)責(zé)從隊(duì)列中獲取并處理請(qǐng)求的線程瘟仿, 它為下面那種線程提供輸出箱锐。

1.1.3、ReplyThread: 負(fù)責(zé)把給用戶的輸出取出來劳较,如果是網(wǎng)絡(luò)應(yīng)用程序就把結(jié)果發(fā)送出去驹止,否則就保存到本地文件系統(tǒng)或數(shù)據(jù)庫中。

Python观蜗、線程和全局解釋器鎖

1.2臊恋、全局解釋器鎖(GIL)

Python 代碼的執(zhí)行由 Python 虛擬機(jī)(也叫解釋器主循環(huán))來控制。Python 在設(shè)計(jì)之初就考慮到要在主循環(huán)中墓捻,同時(shí)只有一個(gè)線程在執(zhí)行抖仅,也就是偽多線程。

1.2.1砖第、對(duì) Python 虛擬機(jī)的訪問由全局解釋器鎖GIL)來控制撤卢,在多線程環(huán)境中,Python 虛擬機(jī)按以下方式執(zhí)行:

python虛擬機(jī)運(yùn)行方式

1.2.2梧兼、Python 提供了幾個(gè)用于多線程編程的模塊放吩,包括 thread, threading 和 Queue 等。thread 和threading 模塊允許程序員創(chuàng)建和管理線程羽杰。thread 模塊提供了基本的線程和鎖的支持渡紫,而 threading提供了更高級(jí)別到推,功能更強(qiáng)的線程管理的功能。Queue 模塊允許用戶創(chuàng)建一個(gè)可以用于多個(gè)線程之間共享數(shù)據(jù)的隊(duì)列數(shù)據(jù)結(jié)構(gòu)

threading 模塊

threading 模塊對(duì)象

1.3.惕澎、守護(hù)線程

1.3.1莉测、threading 模塊支持守護(hù)線程, 它們是這樣工作的: 守護(hù)線程一般是一個(gè)等待客戶請(qǐng)求的服務(wù)器集灌,如果沒有客戶提出請(qǐng)求悔雹,它就在那等著。如果你設(shè)定一個(gè)線程為守護(hù)線程欣喧,就表示你在說這個(gè)線程是不重要的腌零,在進(jìn)程退出的時(shí)候,不用等待這個(gè)線程退出唆阿。

1.3.2益涧、設(shè)置守護(hù)線程的方法:

在線程開始(調(diào)用 thread.start())之前, 調(diào)用 setDaemon()函數(shù)設(shè)定線程的 daemon 標(biāo)志(thread.setDaemon(True)) 就表示這個(gè)線程“不重要”

1.3.3驯鳖、對(duì)于非守護(hù)線程闲询,可以顯式地調(diào)用thread.setDaemon(False)以保證其 daemon 標(biāo)志為 False。 也可以調(diào)用 thread.isDaemon()函數(shù)來判斷其 daemon 標(biāo)志的值浅辙。新的子線程會(huì)繼承其父線程的 daemon 標(biāo)志扭弧。

1.3.4、整個(gè) Python 會(huì)在所有的非守護(hù)線程退出后才會(huì)結(jié)束,即進(jìn)程中沒有非守護(hù)線程存在的時(shí)候才結(jié)束记舆。

1.4鸽捻、threading.Thread類

創(chuàng)建一個(gè) Thread 的實(shí)例,傳給它一個(gè)函數(shù)
創(chuàng)建一個(gè) Thread 的實(shí)例泽腮,傳給它一個(gè)可調(diào)用的類對(duì)象

1.4.1御蒲、threading 模塊中的其它函數(shù)

threading 模塊中的其它函數(shù)

1.5、生產(chǎn)者-消費(fèi)者問題和 Queue 模塊


Queue 模塊


隊(duì)列的讀寫操作1
隊(duì)列操作2


線程生命周期

1.5.1诊赊、線程同步(鎖)

多線程的優(yōu)勢(shì)在于可以同時(shí)運(yùn)行多個(gè)任務(wù)厚满,至少感覺起來是這樣,但是當(dāng)線程需要共享數(shù)據(jù)時(shí)碧磅,可能存在數(shù)據(jù)不同步的問題碘箍。


1.5.2、#構(gòu)造方法:

Thread(group=None,target=None,name=None,args=(),kwargs={})

group:線程組鲸郊,目前還沒有實(shí)現(xiàn)敲街,庫引用時(shí)提示必須是None

target:要執(zhí)行的方法

name:線程名

args/kwargs:要傳入方法的參數(shù),args和kwargs兩個(gè)參數(shù)其實(shí)是二選一

Lock():lock是可用的最低級(jí)的同步指令严望,Lock處于鎖定狀態(tài)時(shí)多艇,不被特定的線程擁有,Lock包含2種狀態(tài)--鎖定和非鎖定以及2個(gè)基本的方法

1.5.3像吻、#實(shí)例方法

isAlive():返回線程是否在運(yùn)行

get/setName(name):獲取/設(shè)置線程名

is/setDaemon(bool):獲取/設(shè)置是否守護(hù)線程峻黍。初始值從創(chuàng)建該線程的線程繼承复隆,當(dāng)沒有非守護(hù)線程仍在運(yùn)行時(shí),程序?qū)⒔K止

start():啟動(dòng)線程

join([timeout]):阻塞當(dāng)前上下文環(huán)境的線程姆涩。

acquire([timeout]):使線程進(jìn)入同步阻塞狀態(tài)挽拂,嘗試獲得鎖定

release():釋放鎖,使用前線程必須已獲得鎖定骨饿,否則將拋出異常

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末亏栈,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子宏赘,更是在濱河造成了極大的恐慌绒北,老刑警劉巖,帶你破解...
    沈念sama閱讀 223,126評(píng)論 6 520
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件察署,死亡現(xiàn)場(chǎng)離奇詭異闷游,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)贴汪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,421評(píng)論 3 400
  • 文/潘曉璐 我一進(jìn)店門脐往,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人扳埂,你說我怎么就攤上這事业簿。” “怎么了阳懂?”我有些...
    開封第一講書人閱讀 169,941評(píng)論 0 366
  • 文/不壞的土叔 我叫張陵梅尤,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我希太,道長(zhǎng),這世上最難降的妖魔是什么酝蜒? 我笑而不...
    開封第一講書人閱讀 60,294評(píng)論 1 300
  • 正文 為了忘掉前任誊辉,我火速辦了婚禮,結(jié)果婚禮上亡脑,老公的妹妹穿的比我還像新娘堕澄。我一直安慰自己,他們只是感情好霉咨,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,295評(píng)論 6 398
  • 文/花漫 我一把揭開白布蛙紫。 她就那樣靜靜地躺著,像睡著了一般途戒。 火紅的嫁衣襯著肌膚如雪坑傅。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,874評(píng)論 1 314
  • 那天喷斋,我揣著相機(jī)與錄音唁毒,去河邊找鬼蒜茴。 笑死,一個(gè)胖子當(dāng)著我的面吹牛浆西,可吹牛的內(nèi)容都是我干的粉私。 我是一名探鬼主播,決...
    沈念sama閱讀 41,285評(píng)論 3 424
  • 文/蒼蘭香墨 我猛地睜開眼近零,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼诺核!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起久信,我...
    開封第一講書人閱讀 40,249評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤窖杀,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后入篮,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體陈瘦,經(jīng)...
    沈念sama閱讀 46,760評(píng)論 1 321
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,840評(píng)論 3 343
  • 正文 我和宋清朗相戀三年潮售,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了痊项。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,973評(píng)論 1 354
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡酥诽,死狀恐怖鞍泉,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肮帐,我是刑警寧澤咖驮,帶...
    沈念sama閱讀 36,631評(píng)論 5 351
  • 正文 年R本政府宣布,位于F島的核電站训枢,受9級(jí)特大地震影響托修,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜恒界,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,315評(píng)論 3 336
  • 文/蒙蒙 一睦刃、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧十酣,春花似錦涩拙、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,797評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至虾宇,卻和暖如春搓彻,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,926評(píng)論 1 275
  • 我被黑心中介騙來泰國(guó)打工好唯, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留竭沫,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 49,431評(píng)論 3 379
  • 正文 我出身青樓骑篙,卻偏偏與公主長(zhǎng)得像蜕提,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子靶端,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,982評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 線程 引言&動(dòng)機(jī) 考慮一下這個(gè)場(chǎng)景谎势,我們有10000條數(shù)據(jù)需要處理,處理每條數(shù)據(jù)需要花費(fèi)1秒杨名,但讀取數(shù)據(jù)只需要0....
    不浪漫的浪漫_ea03閱讀 366評(píng)論 0 0
  • 引言&動(dòng)機(jī) 考慮一下這個(gè)場(chǎng)景脏榆,我們有10000條數(shù)據(jù)需要處理,處理每條數(shù)據(jù)需要花費(fèi)1秒台谍,但讀取數(shù)據(jù)只需要0.1秒须喂,...
    chen_000閱讀 513評(píng)論 0 0
  • 線程狀態(tài)新建,就緒趁蕊,運(yùn)行坞生,阻塞,死亡掷伙。 線程同步多線程可以同時(shí)運(yùn)行多個(gè)任務(wù)是己,線程需要共享數(shù)據(jù)的時(shí)候,可能出現(xiàn)數(shù)據(jù)不...
    KevinCool閱讀 810評(píng)論 0 0
  • 1任柜、線程和進(jìn)程 計(jì)算機(jī)的核心是CPU卒废,它承擔(dān)了所有的計(jì)算任務(wù)。它就像一座工廠宙地,時(shí)刻在運(yùn)行摔认。 假定工廠的電力有限,一...
    文哥的學(xué)習(xí)日記閱讀 14,361評(píng)論 0 9
  • 四鼻子的走宅粥,讓蔡家沉寂了很長(zhǎng)時(shí)間参袱。 這些年來,一直不甘寂寞的蔡家總是會(huì)突然爆出令人意想不到的好消息或者壞消息粹胯,突然...
    cola的春天閱讀 341評(píng)論 4 17