Python多執行緒 程序

2022-06-17 08:42:08 字數 1760 閱讀 6447

一、執行緒&程序

對於作業系統來說,乙個任務就是乙個程序(process),比如開啟乙個瀏覽器就是啟動乙個瀏覽器程序,開啟乙個記事本就啟動了乙個記事本程序,開啟兩個記事本就啟動了兩個記事本程序,開啟乙個word就啟動了乙個word程序。程序是很多資源的集合。

有些程序還不止同時幹一件事,比如word,它可以同時進行打字、拼寫檢查、列印等事情。在乙個程序內部,要同時幹多件事,就需要同時執行多個「子任務」,我們把程序內的這些「子任務」稱為執行緒(thread)。

由於每個程序至少要幹一件事,所以,乙個程序至少有乙個執行緒。當然,像word這種複雜的程序可以有多個執行緒,多個執行緒可以同時執行,多執行緒的執行方式和多程序是一樣的,也是由作業系統在多個執行緒之間快速切換,讓每個執行緒都短暫地交替執行,看起來就像同時執行一樣。當然,真正地同時執行多執行緒需要多核cpu才可能實現。執行緒是最小的執行單元,而程序由至少乙個執行緒組成。

我們在做事情的時候,乙個人做是比較慢的,如果多個人一起來做的話,就比較快了,程式也是一樣的,我們想執行的速度快一點的話,就得使用多程序,或者多執行緒,在python裡面,多執行緒被很多人詬病,為什麼呢,因為python的直譯器使用了gil的乙個叫全域性直譯器鎖,它不能利用多核cpu,只能執行在乙個cpu上面,但是你在執行程式的時候,看起來好像還是在一起執行的,是因為作業系統輪流讓各個任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01秒,再切換到任務3,執行0.01秒……這樣反覆執行下去。表面上看,每個任務都是交替執行的,但是,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。這個叫做上下文切換。

二、多執行緒,python中的多執行緒使用theading模組

下面是乙個簡單多執行緒

下面是另一種啟動多執行緒的方式,繼承式

這兩種方式沒有什麼區別,兩種寫法而已,我個人喜歡用第一種,更簡單一些。

執行緒等待,多執行緒在執行的時候,每個執行緒都是獨立執行的,不受其他的執行緒干擾,如果想在哪個執行緒執行完之後,再做其他操作的話,就得等待它完成,那怎麼等待呢,使用join,等待執行緒結束

守護執行緒,什麼是守護執行緒呢,就相當於你是乙個國王(非守護執行緒),然後你有很多僕人(守護執行緒),這些僕人都是為你服務的,一但你死了,那麼你的僕人都給你陪葬。

執行緒鎖,執行緒鎖就是,很多執行緒一起在操作乙個資料的時候,可能會有問題,就要把這個資料加個鎖,同一時間只能有乙個執行緒操作這個資料。

下面來個簡單的爬蟲,看下多執行緒的效果:

三、多程序,上面說了python裡面的多執行緒,是不能利用多核cpu的,如果想利用多核cpu的話,就得使用多程序,python中多程序使用multiprocessing模組。

python多執行緒 多程序

background task once join is used whether deamon attribute is true is not importantonly useful when the main program is running ok to kill starmap和map...

python多執行緒 多程序

threading相對與thread是更高階別的執行緒管理模組 thread和threading模組中的一些屬性會有衝突 thread模組擁有的同步原因實際上只有乙個lock,而threading有很多 lock,semaphore等 使用thread模組執行緒,當主線程結束時其子執行緒也會被強制結...

python多執行緒多程序

執行緒等待,多執行緒在執行的時候,每個執行緒都是獨立執行的,不受其他的執行緒干擾,如果想在哪個執行緒執行完之後,再做其他操作的話,就得等待它完成,那怎麼等待呢,使用join,等待執行緒結束 for t in threads 等待3個子執行緒 t.join 主線程等待子執行緒 end time tim...