Mr.Li--python-系統(tǒng)編程-線程

線程

多線程--threading

python的thread模塊是比較底層的模塊,python的threading模塊是對thread做了一些包裝的檀何,可以更加方便的被使用

使用threading模塊

importthreading

importtime

defsaySorry():

print("親愛的奇昙,我錯了,我能吃飯了嗎?")

time.sleep(1)

if__name__ =="__main__":

foriinrange(5):

t = threading.Thread(target=saySorry)

t.start()#啟動線程缩搅,即讓線程開始執(zhí)行

多線程并發(fā)操作,話費的時間要短很多

創(chuàng)建好的線程,需要調(diào)用start()方法來啟動

主線程會等愛所有的子線程結(jié)束后才結(jié)束

多線程和多進程一樣,執(zhí)行順序是不確定的人,如果線程被sleep阻塞,到結(jié)束的時候線程進入就緒狀態(tài)

每個線程會有一個名字,python會自動為線程指定一個名字

當線程的run()方法結(jié)束時該線程完成

線程的集中狀態(tài):


總結(jié):

在一個進程內(nèi)的所有線程共享全局變量,能夠在不適用其他方式的前提下完成多線程間的數(shù)據(jù)共享

缺點:

線程對全局變量隨意更改可能會造成多線程之間對全局變量的混亂(線程非安全)

進程和線程:

進程:能夠完成多任務(wù),比如在一臺電腦上能夠同時運行多個QQ

線程:能夠完成多個任務(wù),比如一個qq的多個聊天窗口

定義的不同

·進程是系統(tǒng)進行資源分配和調(diào)度的一個獨立單位.

·線程是進程的一個實體,是CPU調(diào)度和分派的基本單位,它是比進程更小的能獨立運行的基本單位.線程自己基本上不擁有系統(tǒng)資源,只擁有一點在運行中必不可少的資源(如程序計數(shù)器,一組寄存器和棧),但是它可與同屬一個進程的其他的線程共享進程所擁有的全部資源.


區(qū)別:

一個程序至少有一個進程,一個進程至少有一個線程

線程的劃分尺度少于進程(資源比進程少),使得多線程程序的并發(fā)性高,

進程在執(zhí)行過程中擁有獨立的內(nèi)存單元,而對歌線程共享內(nèi)存,從而極大的提高了程序的運行效率

線程不能夠獨立執(zhí)行,必須依存在進程中

優(yōu)缺點:

線程和進城在使用上各有優(yōu)缺點,線程執(zhí)行開銷小,但不利于資源的管理和保護,而進程正好相反

同步的概念:

多線程開發(fā)可能遇到的問題

同步就是協(xié)同步調(diào),按預(yù)定的先后次序進運行

互斥鎖:

當多個線程幾乎同時修改某一個共享數(shù)據(jù)的時候需要進行同步控制

線程同步能夠保證多個線程安全訪問競爭資源冻辩,最簡單的同步機制是引入互斥鎖

互斥鎖為資源引入一個狀態(tài)猖腕,鎖定/非鎖定

某個線程要更改共享數(shù)據(jù)時,先將其鎖定恨闪,此時資源的狀態(tài)為'鎖定',其他線程不能更改,知道該線程釋放資源,其他線程才能再次鎖定該資源

threading.Lock

其中,鎖定方法acquire可以有一個bloching參數(shù).

如果設(shè)定blocking為true,則當前線程會堵塞,知道獲取到這個鎖為止,默認為true,如果設(shè)定為false,則當前線程不會堵塞

threading.enumerate(): 返回一個包含正在運行的線程的list倘感。正在運行指線程啟動后、結(jié)束前咙咽,不包括啟動前和終止后的線程老玛。

threading.activeCount(): 返回正在運行的線程數(shù)量,與len(threading.enumerate())有相同的結(jié)果。

除了使用方法外蜡豹,線程模塊同樣提供了Thread類來處理線程麸粮,Thread類提供了以下方法:

run(): 用以表示線程活動的方法。

start():啟動線程活動余素。

join([time]): 等待至線程中止豹休。這阻塞調(diào)用線程直至線程的join() 方法被調(diào)用中止-正常退出或者拋出未處理的異常-或者是可選的超時發(fā)生。

isAlive(): 返回線程是否活動的桨吊。

getName(): 返回線程名威根。

setName(): 設(shè)置線程名。

注意:

每次只有一個線程可以獲得鎖,如果此時另一個線程試圖獲得這個鎖,該線程就會變成阻塞狀態(tài),只懂啊擁有鎖的方法釋放鎖之后


好處:確保關(guān)鍵代碼完整執(zhí)行:

壞處:

阻止并發(fā)執(zhí)行,使效率降低

可能會造成死鎖

多線程,局部數(shù)據(jù)

在多線程開發(fā)中,全局變量是多個線程都共享的數(shù)據(jù),而局部變量等是各自線程的,非共享

死鎖

兩個線程同時等待對方的資源,就會造成死鎖



盡量避免(銀行家算法)

添加超時時間


queue的說明:

添加數(shù)據(jù)到隊列中,使用put()方法

Queue.qsize() 返回隊列的大小

Queue.empty() 如果隊列為空视乐,返回True,反之False

Queue.full() 如果隊列滿了洛搀,返回True,反之False

Queue.full 與 maxsize 大小對應(yīng)

Queue.get([block[, timeout]])獲取隊列,timeout等待時間

Queue.get_nowait() 相當Queue.get(False)

Queue.put(item) 寫入隊列佑淀,timeout等待時間

Queue.put_nowait(item) 相當Queue.put(item, False)

Queue.task_done() 在完成一項工作之后留美,Queue.task_done()函數(shù)向任務(wù)已經(jīng)完成的隊列發(fā)送一個信號

Queue.join() 實際上意味著等到隊列為空,再執(zhí)行別的操作


伸刃、生產(chǎn)者消費者模式:

生產(chǎn)者消費者模式是通過一個容器來解決生產(chǎn)者和消費者的強耦合問題谎砾。生產(chǎn)者和消費者彼此之間不直接通訊,而通過阻塞隊列來進行通訊捧颅,所以生產(chǎn)者生產(chǎn)完數(shù)據(jù)之后不用等待消費者處理景图,直接扔給阻塞隊列,消費者不找生產(chǎn)者要數(shù)據(jù)碉哑,而是直接從阻塞隊列里取挚币,阻塞隊列就相當于一個緩沖區(qū),平衡了生產(chǎn)者和消費者的處理能力扣典。

這個阻塞隊列就是用來給生產(chǎn)者和消費者解耦的妆毕。縱觀大多數(shù)設(shè)計模式贮尖,都會找一個第三者出來進行解耦

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末笛粘,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子湿硝,更是在濱河造成了極大的恐慌闰蛔,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,110評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件图柏,死亡現(xiàn)場離奇詭異,居然都是意外死亡任连,警方通過查閱死者的電腦和手機蚤吹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,443評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人裁着,你說我怎么就攤上這事繁涂。” “怎么了二驰?”我有些...
    開封第一講書人閱讀 165,474評論 0 356
  • 文/不壞的土叔 我叫張陵扔罪,是天一觀的道長。 經(jīng)常有香客問我桶雀,道長矿酵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,881評論 1 295
  • 正文 為了忘掉前任矗积,我火速辦了婚禮全肮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘棘捣。我一直安慰自己辜腺,他們只是感情好,可當我...
    茶點故事閱讀 67,902評論 6 392
  • 文/花漫 我一把揭開白布乍恐。 她就那樣靜靜地躺著评疗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪茵烈。 梳的紋絲不亂的頭發(fā)上百匆,一...
    開封第一講書人閱讀 51,698評論 1 305
  • 那天,我揣著相機與錄音瞧毙,去河邊找鬼胧华。 笑死,一個胖子當著我的面吹牛宙彪,可吹牛的內(nèi)容都是我干的矩动。 我是一名探鬼主播,決...
    沈念sama閱讀 40,418評論 3 419
  • 文/蒼蘭香墨 我猛地睜開眼释漆,長吁一口氣:“原來是場噩夢啊……” “哼悲没!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起男图,我...
    開封第一講書人閱讀 39,332評論 0 276
  • 序言:老撾萬榮一對情侶失蹤示姿,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后逊笆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體栈戳,經(jīng)...
    沈念sama閱讀 45,796評論 1 316
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,968評論 3 337
  • 正文 我和宋清朗相戀三年难裆,在試婚紗的時候發(fā)現(xiàn)自己被綠了子檀。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片镊掖。...
    茶點故事閱讀 40,110評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖褂痰,靈堂內(nèi)的尸體忽然破棺而出亩进,到底是詐尸還是另有隱情,我是刑警寧澤缩歪,帶...
    沈念sama閱讀 35,792評論 5 346
  • 正文 年R本政府宣布归薛,位于F島的核電站,受9級特大地震影響匪蝙,放射性物質(zhì)發(fā)生泄漏主籍。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,455評論 3 331
  • 文/蒙蒙 一骗污、第九天 我趴在偏房一處隱蔽的房頂上張望崇猫。 院中可真熱鬧,春花似錦需忿、人聲如沸诅炉。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,003評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽涕烧。三九已至,卻和暖如春汗洒,著一層夾襖步出監(jiān)牢的瞬間议纯,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,130評論 1 272
  • 我被黑心中介騙來泰國打工溢谤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留瞻凤,地道東北人。 一個月前我還...
    沈念sama閱讀 48,348評論 3 373
  • 正文 我出身青樓世杀,卻偏偏與公主長得像阀参,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子瞻坝,可洞房花燭夜當晚...
    茶點故事閱讀 45,047評論 2 355

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

  • 線程 1.同步概念 1.多線程開發(fā)可能遇到的問題 同步不是一起的意思蛛壳,是協(xié)同步調(diào) 假設(shè)兩個線程t1和t2都要對nu...
    TENG書閱讀 611評論 0 1
  • 1.進程和線程 隊列:1、進程之間的通信: q = multiprocessing.Queue()2所刀、...
    一只寫程序的猿閱讀 1,111評論 0 17
  • Java-Review-Note——4.多線程 標簽: JavaStudy PS:本來是分開三篇的衙荐,后來想想還是整...
    coder_pig閱讀 1,653評論 2 17
  • 1.線程的基本概念 1.1 線程 線程是應(yīng)用程序最小的執(zhí)行單元,線程與進程類似浮创,進程可以看做程序的一次執(zhí)行忧吟,而線程...
    XYZeroing閱讀 981評論 1 16
  • 多任務(wù)可以由多進程完成,也可以由一個進程內(nèi)的多線程完成斩披。我們前面提到了進程是由若干線程組成的溜族,一個進程至少有一個線...
    壁花燒年閱讀 817評論 0 0