Python Thread創(chuàng)建線程

Python通過兩個標準庫thread和threading提供對線程的支持震蒋。thread提供了低級別的、原始的線程以及一個簡單的鎖躲庄。threading模塊對thread進行了進一步的封裝查剖,因此在使用的時候,一般使用threading模塊噪窘。

多任務可以由多進程完成笋庄,也可以由一個進程內(nèi)的多線程完成。進程是由若干線程組成的倔监,一個進程至少有一個線程直砂。

1、使用threading模塊創(chuàng)建線程

例:利用Thread類創(chuàng)建線程

創(chuàng)建線程
創(chuàng)建線程運行結(jié)果

與利用Process()創(chuàng)建進程類似浩习,Thread()類的target函數(shù)接受一個函數(shù)静暂,用于Thread類執(zhí)行時調(diào)用,如果調(diào)用的函數(shù)需要參數(shù)瘦锹,則通過args參數(shù)傳遞一個元組類型的參數(shù)列表籍嘹。

例:調(diào)用帶參數(shù)的函數(shù)

Thread調(diào)用帶參數(shù)的函數(shù)
Thread調(diào)用帶參數(shù)的函數(shù)運行結(jié)果

當需要一些復雜的邏輯時,直接用Thread()調(diào)用函數(shù)總顯得有些復雜弯院,我們可以利用Thread創(chuàng)建的子類滿足需求辱士。

2、使用Thread子類創(chuàng)建線程

例:利用Thread子類創(chuàng)建線程

利用Thread子類創(chuàng)建線程
利用Thread子類創(chuàng)建線程運行結(jié)果

我們自己創(chuàng)建的類听绳,繼承自Thread颂碘,當執(zhí)行start()方法時,Python解釋器會調(diào)用自定義類中重寫的run()方法。

3头岔、多個線程的執(zhí)行順序

當啟動多個線程時塔拳,線程之間的執(zhí)行是沒有順序的,線程之間的調(diào)度是由操作系統(tǒng)的調(diào)度算法來決定的峡竣。

例:啟動多個線程

?啟動多個線程
多個線程執(zhí)行是無序的

4靠抑、多個線程之間共享全局變量

多個進程之間是相互獨立的,因此多個進程之間是不會共享全局變量的适掰。但是多個線程之間會共享全局變量颂碧,當一個線程改變?nèi)肿兞繒r,另一個線程中的全局變量會隨之改變类浪。

例:多線程之間共享全局變量

多線程共享全局變量
多線程共享全局變量運行結(jié)果

5载城、多個線程共享全局變量造成的問題

多個線程共享全局變量的優(yōu)點是费就,不再像多個進程那樣诉瓦,如果要共享數(shù)據(jù)需要借助第三方才能夠?qū)崿F(xiàn),比如Queue力细,但是如果處理不好多線程共享全局變量睬澡,會發(fā)生意想不到的結(jié)果。

例:多個線程共享全局變量造成的問題

6眠蚂、解決多線程共享全局變量BUG

我們可以定義另一個全局變量猴贰,來判斷當前線程的狀態(tài),只有當一個線程執(zhí)行完之后河狐,另一個線程才能開啟米绕。

例:定義線程是否執(zhí)行完標記

定義判斷線程是否結(jié)束標記
運行結(jié)果

由以上程序可知,定義了判斷線程結(jié)束標記以后馋艺,雖然能夠解決問題栅干,但是當?shù)谝粋€線程執(zhí)行時,第二個線程在循環(huán)判斷標記是否已經(jīng)改變捐祠,循環(huán)判斷會占用CPU資源碱鳞,對性能造成影響。

7踱蛀、利用互斥鎖

某個線程要共享數(shù)據(jù)時窿给,先將其鎖定,此時資源的狀態(tài)為“鎖定”率拒,其他線程不能更改崩泡;直到該線程釋放資源,將資源的狀態(tài)變成“非鎖定”猬膨,其他的線程才能再次鎖定該資源角撞。互斥鎖保證了每次只有一個線程進入寫入操作,從而保證了多線程情況下數(shù)據(jù)的正確性谒所。

創(chuàng)建鎖

mutex=threading.Lock()

鎖定

mutex.acquire([blocking])#里面可以加blocking(等待的時間)或者不加热康,不加就會一直等待(堵塞)

釋放

mutex.release()

利用互斥鎖解決共享全局變量問題
運行結(jié)果

只要一上鎖,由多任務變?yōu)閱稳蝿?相當于只有一個線程在運行劣领。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末姐军,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子尖淘,更是在濱河造成了極大的恐慌庶弃,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,366評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件德澈,死亡現(xiàn)場離奇詭異,居然都是意外死亡固惯,警方通過查閱死者的電腦和手機梆造,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,521評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來葬毫,“玉大人镇辉,你說我怎么就攤上這事√瘢” “怎么了忽肛?”我有些...
    開封第一講書人閱讀 165,689評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長烂斋。 經(jīng)常有香客問我屹逛,道長,這世上最難降的妖魔是什么汛骂? 我笑而不...
    開封第一講書人閱讀 58,925評論 1 295
  • 正文 為了忘掉前任罕模,我火速辦了婚禮,結(jié)果婚禮上帘瞭,老公的妹妹穿的比我還像新娘淑掌。我一直安慰自己,他們只是感情好蝶念,可當我...
    茶點故事閱讀 67,942評論 6 392
  • 文/花漫 我一把揭開白布抛腕。 她就那樣靜靜地躺著,像睡著了一般媒殉。 火紅的嫁衣襯著肌膚如雪担敌。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,727評論 1 305
  • 那天廷蓉,我揣著相機與錄音柄错,去河邊找鬼。 笑死,一個胖子當著我的面吹牛售貌,可吹牛的內(nèi)容都是我干的给猾。 我是一名探鬼主播,決...
    沈念sama閱讀 40,447評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼颂跨,長吁一口氣:“原來是場噩夢啊……” “哼敢伸!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起恒削,我...
    開封第一講書人閱讀 39,349評論 0 276
  • 序言:老撾萬榮一對情侶失蹤池颈,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后钓丰,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體躯砰,經(jīng)...
    沈念sama閱讀 45,820評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,990評論 3 337
  • 正文 我和宋清朗相戀三年携丁,在試婚紗的時候發(fā)現(xiàn)自己被綠了琢歇。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,127評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡梦鉴,死狀恐怖李茫,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情肥橙,我是刑警寧澤魄宏,帶...
    沈念sama閱讀 35,812評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站存筏,受9級特大地震影響宠互,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜椭坚,卻給世界環(huán)境...
    茶點故事閱讀 41,471評論 3 331
  • 文/蒙蒙 一名秀、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧藕溅,春花似錦匕得、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,017評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至集币,卻和暖如春考阱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背鞠苟。 一陣腳步聲響...
    開封第一講書人閱讀 33,142評論 1 272
  • 我被黑心中介騙來泰國打工乞榨, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留秽之,地道東北人。 一個月前我還...
    沈念sama閱讀 48,388評論 3 373
  • 正文 我出身青樓吃既,卻偏偏與公主長得像考榨,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子鹦倚,可洞房花燭夜當晚...
    茶點故事閱讀 45,066評論 2 355

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

  • 線程 操作系統(tǒng)線程理論 線程概念的引入背景 進程 之前我們已經(jīng)了解了操作系統(tǒng)中進程的概念震叙,程序并不能單獨運行掀鹅,只有...
    go以恒閱讀 1,645評論 0 6
  • 一. 操作系統(tǒng)概念 操作系統(tǒng)位于底層硬件與應用軟件之間的一層.工作方式: 向下管理硬件,向上提供接口.操作系統(tǒng)進行...
    月亮是我踢彎得閱讀 5,971評論 3 28
  • 一、Python簡介和環(huán)境搭建以及pip的安裝 4課時實驗課主要內(nèi)容 【Python簡介】: Python 是一個...
    _小老虎_閱讀 5,746評論 0 10
  • 必備的理論基礎 1.操作系統(tǒng)作用: 隱藏丑陋復雜的硬件接口媒楼,提供良好的抽象接口乐尊。 管理調(diào)度進程,并將多個進程對硬件...
    drfung閱讀 3,541評論 0 5
  • Swift1> Swift和OC的區(qū)別1.1> Swift沒有地址/指針的概念1.2> 泛型1.3> 類型嚴謹 對...
    cosWriter閱讀 11,104評論 1 32