threading子產品:利用cpu空閑時間執行多任務。python的多線程實際是遇到io操作就cpu切換到其它任務。
1、gil (global interpreter lock):全局解釋器鎖
作用就是保證同一時刻cpu隻執行一個線程。隻有cpython有gil鎖。
2、簡單的threading使用
常用類和方法名:
參數
作用
示例
threading.enumerate()
用清單,列出所有活動的線程名和id
示例中列出的是
s = threading.enumerate()
for v in s:
print(v.name)
threading.tread.isalive(線程執行個體名)
線程執行個體名:下面的thread_create
判斷線程是否正在運作,傳回true或false
threading.tread.isalive(ss)
或者
i.isalive() #i是建立的thread執行個體
thread_create=threading.thread()
target:加入多線程的對象名
args:對象的參數,元組形式
kwargs:對象的字典參數
name:指定線程名,預設thread-n
把一個對象執行個體化成一個線程對象
thread_create = threading.tread(target=work,args=('tom',),kwargs={'work_name':'eat'})
thread_create.start()
啟動線程
thread_create.join()
timeout:線程阻塞的時間(逾時時間)
timeout預設,等待此線程執行完畢
等待至線程中止或timeout逾時,再繼續執行程式
thread_create.join(5)
thread_create.join(timeout=5)
thread_create.getname()
擷取thread_create線程名
thread_create.setname()
name:線程名
設定thread_create線程名,這個名字隻是辨別
thread_create.setname('th1')
3、守護線程deamon
類、方法、屬性名
setdaemon(bool)
bool:true
false
設定線程為父線程的守護線程,必須在strar()線程開始前設定。
m為建立的程序執行個體。
m.setdaemon(true)
isdaemon()
無
判斷目前線程是否設定了守護線程
傳回bool型,true 或 false
m.isdaemon()
4 、線程鎖lock、遞歸鎖rlock
加鎖以後線程依次運作。
lock()
lock類,用于建立lock對象
lock = threading.lock()
rlock()
rlock類,用于建立遞歸鎖,也叫做多重鎖
同一線程可以acquire()多次,但要對應相同數量的release()
rlock = threading.rlock()
acquire()
lock和rlock的方法:
啟用線程鎖
lock.acquire()
release()
釋放線程鎖
lock.release()
5 、信号量(semaphore)
boundedsemaphore(num)
num:int型,隻允許num個線程同時運作
建立一個semaphore對象
semaphore = threading.boundedsemaphore(3)
把線程加入信号量對象
semaphore .acquire()
把線程從信号量對象中删除
semaphore .release()
5 、定時器(timer)
timer(time,func,args)
time:延時時間(機關:秒)
func:要執行的函數名
args:參數,與多程序使用方法一樣
生成定時器執行個體,過time的時長後,執行func的功能。
start()
啟動定時器
timer.start()
stop()
停止定時器
timer.stop()
6 、事件(event)
event是線程同步的一種方式,類似于一個标志,當該标志為false時,所有等待該标志的線程阻塞,當為true時,所有等待該标志的線程被喚醒。
event是一個重要的概念,有一個程式設計思想叫事件驅動模型。稍後讨論。
event()
執行個體化事件對象
e = threading.event()
isset()
判斷事件标志,傳回true或false
e.isset()
set()
設定事件标志,isset()為true
e.set()
clear()
清除事件标志,isset()為true
e.clear()
wait(timeout)
timeout:時間
參考資料:
https://blog.csdn.net/drdairen/article/details/60962439
https://www.cnblogs.com/wang-can/p/3582051.html
https://blog.csdn.net/wanghaoxi3000/article/details/70880753\
https://www.cnblogs.com/nulige/p/6297829.html