多線程--threading
python的thread模塊是比較底層的模塊杭棵,python的threading模塊是對thread做了些封裝的礁鲁,可以更加方便的使用
1.使用thearding模塊
說明:
--1.可以明顯的看出使用了多線程并發(fā)的操作,花費時間要短很多
--2.創(chuàng)建好的線程,需要調(diào)用start()方法來啟動
2.主線程會等待所有子線程結束后才結束
為什么會等子線程結束,主線程才結束呢替蔬?回收內(nèi)存。
3.查看線程
上述代碼添加了以下代碼:
4.threading注意點
threading.Thread封裝子類
通過使用threading模塊能完成多任務的程序開發(fā)屎暇,為了讓每個線程的封裝性更完美承桥,所以使用threading模塊時,往往會定義一個新的子類class根悼,只要繼承threading.Thread就可以了凶异,然后重新run方法
5.線程的執(zhí)行順序
說明:
只能保證每個線程都運行完整個run函數(shù)蜀撑,但是線程的啟動順序,run函數(shù)中每次循環(huán)的執(zhí)行順序都不能確定
注意:
每個線程一定會有一個名字剩彬,盡管上面的例子中沒有指定線程對象的name酷麦,但是python會自動為線程指定一個名字
當線程的run()方法結束時該線程完成
無法控制線程調(diào)度程序,但是可以通過被的方式來影響線程調(diào)度的方式
線程的集中狀態(tài):啟動喉恋,調(diào)度沃饶,結束,等待
6.多線程--共享全局變量
兩個線程修改全局變量
7.列表當做實參傳遞到線程中
在一個進程內(nèi)的所有線程共享全局變量轻黑,能夠在不適用其他方式的前提下完成
8.進程線程
進程:能夠完成任務糊肤,比如一臺電腦上能夠同時運行多個QQ
線程:能夠完成多任務,比如一個QQ中的多個聊天窗口
9.同步
同步就是協(xié)同步調(diào)苔悦,按預定的先后次序進行運行轩褐。
10.互斥鎖
當多個線程幾乎同時修改某一個共享數(shù)據(jù)的時候,需要進行同步控制
鎖的好處:
確保了某段關鍵代碼只能由一個線程從頭到尾完整的執(zhí)行
鎖的壞處:
阻止了多線程并發(fā)執(zhí)行玖详,包含鎖的某段代碼實際上只能以單線程模式執(zhí)行,效率就大大的下降了勤讽,
由于可以存在對哦個鎖蟋座,不同的線程持有不同的鎖,并試圖獲取對方持有的鎖時脚牍,可能會造成死鎖向臀。