1. 程式人生 > >Python的線程&進程&協程[1] -> 線程 -> threading 模塊

Python的線程&進程&協程[1] -> 線程 -> threading 模塊

red tuple strong 解鎖 根據 變量 post size 功能

threading模塊 / threading Module


1 常量 / Constants

Pass

2 函數 / Function

2.1 setprofile()函數

函數調用: threading.setprofile(func)

函數功能:為所有線程設置一個profile函數

傳入參數: func

func: method類型,

返回參數:

2.2 settrace()函數

函數調用: threading.settrace(func)

函數功能:為所有線程設置一個trace函數

傳入參數: func

func: method類型,

返回參數:

2.3 active_count()

函數

函數調用: num = threading.active_count()

函數功能:返回當前活動的線程個數

傳入參數:

返回參數: num

num: int類型,當前活動的線程個數

2.4 current_thread()函數

函數調用: cthr = threading.current_thread()

函數功能:返回當前運行的線程

傳入參數:

返回參數: cthr

cthr: instance類型,當前運行的線程的實例或一個DummyThread

2.5 enumerate()函數

函數調用: thr_list = threading.enumerate()

函數功能:返回當前活動的線程對象列表

傳入參數:

返回參數: thr_list

thr_list: list類型,列表包含當前活動的所有線程對象

2.6 stack_size()函數

函數調用: size = threading.stack_size()

函數功能:返回新建線程的棧大小

傳入參數:

返回參數: size

size: int類型,新線程棧的大小

3 / Class

3.1 Thread

類實例化:thr = threading.Thread(group=None, target=None, name=None, args=(), daemon=None)

類的功能: 用於生成一個新的線程實例

傳入參數

: group, target, name, args, daemon

group: NoneType類型,目前僅支持為None

target: obj/func類型,需要可調用

name: str類型,線程的名稱,為None則線程會根據生成的順序自動賦予名字

args: tuple類型,傳給target的參數(還有kwargs未註出)

daemon: bool類型,設置是否為守護線程

返回參數: thr

thr: instance類型,生成的新的線程實例

3.1.1 name屬性方法

屬性調用: n = thr.name / thr.name = n

屬性功能: 返回線程的名稱 / 設置線程的名稱

屬性參數: n

n: str類型,線程的名稱

3.1.2 ident屬性方法

屬性調用: i = thr.ident

屬性功能: 返回線程的標識符

屬性參數: i

i: str/NoneType類型,線程的標識符

3.1.3 daemon屬性方法

屬性調用: thr.daemon / thr.daemon = b

屬性功能: 返回線程的守護線程標識 / 設置守護線程標識

屬性參數: b

b: bool類型,線程的守護線程標識,True表示為守護線程

3.1.4 start()方法

函數調用: thr.start()

函數功能:開始執行該線程

傳入參數:

返回參數:

3.1.5 run()方法

函數調用: thr.run() / thr.start()

函數功能:線程的功能函數,線程開始時執行,通常在子類中被用戶重定義,一般通過start()函數調用

傳入參數:

返回參數:

3.1.6 join()方法

函數調用: thr.join(timeout=None)

函數功能:使線程掛起,除非給出timeout,否則一直阻塞,直至啟動的線程全部結束

傳入參數: timeout

timeout: None/int類型,設置阻塞超時時間(s)

返回參數:

3.1.7 is_alive()方法

函數調用: s = thr.is_alive()

函數功能:查看線程是否處在運行狀態

傳入參數:

返回參數: s

s: bool類型,線程是否在運行中,True則運行中,False則停止

3.2 Lock/RLock

類實例化:lock = threading.Lock()/RLock()

類的功能:用於生成(可重入鎖)線程鎖,對於Lock,其本質是由threading._allocate_lock(由_thread.allocate_lock重命名而來)賦值得到,可通過help(threading.Lock)查看

傳入參數:

返回參數: lock

lock: instance類型,生成的(可重入鎖)線程鎖實例

3.2.1 acquire()方法

函數調用: lock.acquire()

函數功能:獲得線程鎖,使資源被鎖定,其他線程無法訪問

傳入參數:

返回參數:

3.2.2 release()方法

函數調用: lock.release()

函數功能:釋放線程鎖,使資源解鎖可被其他線程使用

傳入參數:

返回參數:

3.3 Semaphore / BoundedSemaphore

類實例化:sep = threading.Semaphore(value=1)/BoundedSemaphore(value=1)

類的功能:生成一個(有界)信號量的實例。對於(有界)信號量來說,內部管理著一個計數器,計數器的初始值由value傳入,默認為1,調用acquire()函數會使計數器-1,調用release()函數會使計數器+1,對於信號量來說,計數器值永遠不會小於0,當計數器為0時,再調用acquire()函數則會阻塞,等待其他線程release。而對於BoundedSemaphore,則多了一個上限值,即計數器的值不能超過初始值value,否則會拋出一個ValueError(計數器release次數過多,意味著可能存在bug)。Semaphore中同樣支持上下文管理協議。

傳入參數: value

value: int類型,初始信號量數,用於設置內部計數器初始值

返回參數: sep

sep: instance類型,信號量實例

3.3.1 _value屬性

屬性調用: value = sep._value

屬性功能: 返回當前信號量可用數(可供acquire()-1的數量)

屬性參數: value

value: int類型,可用信號量的剩余值

3.3.2 acquire()方法

函數調用: sep.acquire(blocking=True, timeout=None)

函數功能:獲取信號量,會使信號量計數器-1

傳入參數: blocking, timeout

blocking: bool類型,用於設置是否阻塞等待,為True則當計數器為0時,會阻塞等待計數器,直到其他線程調用release()方法使計數器為正。若為False則不會進行阻塞等待,當計數器為0時,返回False

timeout: int類型,用於設置阻塞超時,當阻塞時間超過timeout時,返回False

返回參數:

3.3.3 release()方法

函數調用: sep.release()

函數功能:釋放信號量,會使信號量計數器+1

傳入參數:

返回參數:

3.4 Condition

類實例化:cond = threading.Condition(lock=None)

類的功能:生成一個條件變量,用於進行等待喚醒控制

傳入參數: lock

lock: instance類型,鎖的實例,用於替換內置的RLock鎖

返回參數: cond

cond: instance類型,生成的一個條件控制變量實例

3.4.1 acquire屬性

屬性調用: cond.acquire()

屬性功能: 其本質是Condition內置鎖的acquire函數,源碼中在初始化時指向了Condition的類實例屬性cond.acquire,因此可以直接對實例屬性進行調用,獲取鎖權限

屬性參數: acquire

acquire: function類型,是Condition內置鎖的acquire方法

3.4.2 release屬性

屬性調用: cond.release()

屬性功能: 其本質是Condition內置鎖的release函數,源碼中在初始化時指向了Condition的類實例屬性cond.release,因此可以直接對實例屬性進行調用,釋放鎖權限

屬性參數: release

release: function類型,是Condition內置鎖的release方法

3.4.3 wait()函數

函數調用: cond.wait(timeout=None)

函數功能:掛起當前線程,進入等待喚醒狀態,同時出讓Condition內置鎖的權限

傳入參數: timeout

timeout: int/NoneType類型,設置等待的超時限制

返回參數:

3.4.4 wait_for()方法

函數調用: re = cond.wait_for(predicate, timeout=None)

函數功能:掛起當前線程,調用predicate函數等待返回結果為True

傳入參數: predicate, timeout

predicate: function類型,等待的條件函數

timeout: int/NoneType類型,設置等待條件函數的超時時間

返回參數: re

re: bool類型,條件等待的結果,條件函數返回True則此處為True,條件函數返回False或等待超時,都會返回False

3.4.5 notify()方法

函數調用: cond.notify(n=1)

函數功能:按照進入等待的順序喚醒相應數量的等待線程

傳入參數: n

n: int類型,喚醒線程的數量

返回參數:

3.4.6 notify_all()方法

函數調用: cond.notify_all()

函數功能:按照進入等待的順序喚醒所有等待線程

傳入參數:

返回參數:

3.5 Event

類實例化:evt = threading.Event()

類的功能:通過內置標誌位控制線程的類

傳入參數:

返回參數: evt

evt: instance類型,生成的時間出發類實例

3.5.1 is_set()方法

函數調用: re = evt.is_set()

函數功能:查看內置標誌位狀態

傳入參數:

返回參數: re

re: bool類型,內置的標誌位值

3.5.2 set()方法

函數調用: evt.is_set()

函數功能:設置內置標誌位為True,喚醒等待線程。其實質為with cond的notify_all

傳入參數:

返回參數:

3.5.3 clear()方法

函數調用: evt.clear()

函數功能:設置內置標誌位為False,其本質為with cond下的Flag=False

傳入參數:

返回參數:

3.5.4 wait()方法

函數調用: [re = ]evt.wait(timeout=None)

函數功能:查看內置標誌,判斷是否進入等待,其本質為cond.wait()

傳入參數: timeout

timeout: int類型,設置的超時時間

返回參數: re

re: bool類型,等待結束返回True,超時或失敗返回False

3.6 Barrier

類實例化:barr = threading.Barrier(parties, action=None, timeout=None)

類的功能:建立一個線程阻礙實例,直到線程阻礙的wait數量達到設置值時,會釋放所有等待的線程

傳入參數: parties, action, timeout

parites: int類型,設置障礙阻塞線程的數量,達到此數量則釋放阻塞

action: function類型,當越過障礙時,由其中一個線程執行該函數一次

timeout: int類型,障礙等待的超時時間

返回參數: barr

barr: instance類型,返回的障礙實例

3.6.1 parties屬性方法

屬性調用: parties = barr.parites()

屬性功能: 返回跨越障礙所需要的等待線程數量

屬性參數: parties

parties: int類型,跨越障礙所需的線程數量

3.6.2 n_waiting屬性方法

屬性調用: n = barr.n_waiting()

屬性功能: 返回當前障礙中正在等待的線程數量

屬性參數: n

n: int類型,當前障礙中正在等待的線程數量

3.6.3 wait()方法

函數調用: barr.wait(timeout=None)

函數功能:使線程掛起阻塞,並且使障礙等待線程數量增加一個

傳入參數: timeout

timeout: int類型,設置的超時時間

返回參數:

3.7 Timer

類實例化:timex = threading.Timer(interval, function, args=None, kwargs=None)

類的功能:生成一個延時調用函數的線程實例,基類為Thread,本質基於Event

傳入參數: interval, function, args, kwargs

interval: int/float類型,函數延遲啟動的時間

function: function類型,需要調用的函數

args: 傳遞給function的參數

kwargs: 傳遞給function的默認參數

返回參數: timex

timex: instance類型,延遲線程的類實例

3.7.1 cancel()方法

函數調用: timex.cancel()

函數功能:取消對延遲函數的延遲等待,如果延遲函數還未啟動

傳入參數:

返回參數:

3.7.2 run()方法

函數調用: timex.run()

函數功能:開啟延時線程實例的計時

傳入參數:

返回參數:

3.8 _DummyThread

類實例化:_dummy = _DummyThread()

類的功能:代表當前未運行的線程,常在current_thread中調用不是通過threading生成的線程時,返回一個功能有限的DummyThread

傳入參數:

返回參數: _dummy

_dummy: instance類型,Dummy線程,守護線程性質

3.9 _MainThread

類實例化:_main_thread = _MainThread()

類的功能:生成模塊內代表主線程的特殊線程

傳入參數:

返回參數: _main_thread

_main_thread: instance類型,代表主線程的實例

Python的線程&進程&協程[1] -> 線程 -> threading 模塊