天天看點

【PYTHON子產品】threading子產品

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

繼續閱讀