上次已經和大家探討了關於進程和線程的區別和聯繫相關的東東,今天呢,咱們再次回到Python哦,和大家一起聊聊如何進行Python並發編程哦,大家也可以理解為如何在Python中進行多線程編程哦!
好啦,廢話少說,咱們就開始吧!
首先說一下哦,Python內部是提供了兩個模塊來支持多線程編程的,它們分別是_thread和threading哦,到這可能有朋友會問了,這兩個有什麼區別呢?好問題哦,其實呢,_thread是提供低級別而且是比較原始的線程支持的哦,而且呢它還有一個簡單的鎖,通過以前咱們的講解大家對於_thread前面的下劃線的意思已經明白啦,它是代表隱藏的含義哦,這也表明了其實Python是不建議咱們使用這個_thread的;因此呢,如果你在Python中想進行多線程編程,那就好好使用threading模塊吧,因為在threading中提供了功能超級豐富的對多線程編程的支持哦!
其實,對於Python創建線程的方式主要有兩種哦,今天呢,咱們就先介紹一下第一種吧,第二種方式咱們下次介紹哦,那第一種方式是什麼呢?它就是使用threading模塊的Thread類的構造方法(也可以叫構造器哦)創建線程哦!
那如何使用threading模塊的Thread類的構造器創建線程呢?不要著急哦,要想知道怎麼創建,首先咱們需要了解一下threading模塊中Thread類的構造器的語法結構哦:
__init__(self, group=None, target=None, name=None, args=(), kwargs=None, *, daemon=None)
首先說一下哦,上面Thread類的這個構造器中的很多參數是自身賦值None,說明它是默認參數哦,對於這類參數可以不做任何賦值就會有None這個默認值哦,好啦,咱們就說一下__init__()中各個參數的含義吧:
第一個參數self,這個大家都熟悉啦,在Python的類中每個方法的首個參數必須是self哦;
第二個參數group,表示該線程所屬的線程組哦,據說這個參數是保留使用的,還沒有具體的實際實現意義哦;
第三個參數target,表示該線程要調度的目標方法哦;
第四個參數name表示線程名哦;
第五個參數args,通過它的賦值可以看出它是一個元組哦,表示以位置參數的形式為target指定的函數傳入參數哦;
第六個參數kwargs,代表一個字典哦,表示你可以以關鍵字參數的形式為target指定的函數傳入參數哦;
第七個參數daemon,代表指定所構建的線程是否是後臺線程哦。
到這大家是否對於Thread類的構造器__init__()有點晦澀難懂呢,沒關係哦,下面咱們舉個「慄子」就清楚啦,舉「慄子」之前咱們先說一下使用Tread類的狗仔妻創建多線程的步驟哦:
第一步呢,就是調用Tread類的構造器創建線程對象哦,在創建線程對象時,target參數指定的函數將會作為線程的執行體哦;
第二步呢,就是調用線程對象的start()函數啟動這個線程哦。
好啦,下面咱們正式舉「慄」哦:
上面就是咱們所編寫的程序哦,可以看到哦,在主函數中咱們定義了一個循環哦,在這個循環中咱們設定當循環變量i等於10時就會創建並啟動兩個咱們定義的新的線程哦,其中第16行和第19行就是咱們所創建的兩個線程哦,對於兩個線程的運行都是調用start()函數哦!
下面咱們就運行一下上面咱們所編寫的這個程序來看看效果吧:
上面就是多線程的運行結果哦,咱們用不同的顏色進行了標記哦,看一看到主線程和咱們所創建並運行的兩個線程都進行了無規律的交叉運行哦,這就表明咱們使用Python進行多線程編程成功了哦,這就是經典的並發編程哦,其實呢,是因為咱們電腦的CPU以極快的速度在這幾個線程之間進行切換執行的,由於電腦主頻很高哦,所以呢,咱們就感覺是電腦進行了並發編程的哦!
好啦,上面就是咱們所聊的關於使用threading模塊的Thread類的構造器__init__()創建線程的東東哦,關於Python創建線程的第二種方法(使用繼承threading模塊的Thread類創建線程類)咱們下次進行介紹哦,今天咱們就聊到這吧,下次再見哦!
敬請關注「品位集結號」,為您帶來意外的小收穫!