多線程--threading
python的thread模塊是比較底層的模塊,python的threading模塊是對thread做了些封裝的,可以更加方便的使用
1.使用thearding模塊


說明:
--1.可以明顯的看出使用了多線程并發(fā)的操作,花費時間要短很多
--2.創(chuàng)建好的線程,需要調(diào)用start()方法來啟動
2.主線程會等待所有子線程結(jié)束后才結(jié)束

為什么會等子線程結(jié)束,主線程才結(jié)束呢?回收內(nèi)存。
3.查看線程
上述代碼添加了以下代碼:

4.threading注意點
threading.Thread封裝子類
通過使用threading模塊能完成多任務(wù)的程序開發(fā),為了讓每個線程的封裝性更完美,所以使用threading模塊時,往往會定義一個新的子類class,只要繼承threading.Thread就可以了,然后重新run方法

5.線程的執(zhí)行順序

說明:
只能保證每個線程都運行完整個run函數(shù),但是線程的啟動順序,run函數(shù)中每次循環(huán)的執(zhí)行順序都不能確定
注意:
每個線程一定會有一個名字,盡管上面的例子中沒有指定線程對象的name,但是python會自動為線程指定一個名字
當(dāng)線程的run()方法結(jié)束時該線程完成
無法控制線程調(diào)度程序,但是可以通過被的方式來影響線程調(diào)度的方式
線程的集中狀態(tài):啟動,調(diào)度,結(jié)束,等待
6.多線程--共享全局變量
兩個線程修改全局變量

7.列表當(dāng)做實參傳遞到線程中

在一個進程內(nèi)的所有線程共享全局變量,能夠在不適用其他方式的前提下完成
8.進程線程
進程:能夠完成任務(wù),比如一臺電腦上能夠同時運行多個QQ
線程:能夠完成多任務(wù),比如一個QQ中的多個聊天窗口
9.同步
同步就是協(xié)同步調(diào),按預(yù)定的先后次序進行運行。
10.互斥鎖
當(dāng)多個線程幾乎同時修改某一個共享數(shù)據(jù)的時候,需要進行同步控制

鎖的好處:
確保了某段關(guān)鍵代碼只能由一個線程從頭到尾完整的執(zhí)行
鎖的壞處:
阻止了多線程并發(fā)執(zhí)行,包含鎖的某段代碼實際上只能以單線程模式執(zhí)行,效率就大大的下降了,
由于可以存在對哦個鎖,不同的線程持有不同的鎖,并試圖獲取對方持有的鎖時,可能會造成死鎖。