Python的線程&進程&協程[1] -> 線程 -> threading 模塊
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: 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 模塊