該模塊提供以下管理線程的功能:
這是上一個教程的代碼片段,我們將使用它來查看threading
模塊提供的各種功能。
該函數返回當前活動的Thread
對象的數量。
import time
import threading
def thread1(i):
time.sleep(3)
#print('No. printed by Thread 1: %d' %i)
def thread2(i):
time.sleep(3)
#print('No. printed by Thread 2: %d' %i)
if __name__ == '__main__':
t1 = threading.Thread(target=thread1, args=(10,))
t2 = threading.Thread(target=thread2, args=(12,))
t1.start()
t2.start()
print("No. of active threads: " + threading.active_count())
t1.join()
t2.join()
活動線程數:3
嘗試在上面的終端中運行該代碼。您將看到線程數為 3 ,因為我們已經創建了 2 個線程,並且在主線程中正在進行完整的執行。
該函數將返回當前線程對象,對應調用者的控制線程(當前在調用者的控制中)。如果調用者的控制線程不是通過線程模塊(例如主線程)創建的,則返回一個功能有限的偽線程對象。
import time
import threading
def thread1(i):
time.sleep(3)
#print('No. printed by Thread 1: %d' %i)
def thread2(i):
time.sleep(3)
#print('No. printed by Thread 2: %d' %i)
if __name__ == '__main__':
t1 = threading.Thread(target=thread1, args=(10,))
t2 = threading.Thread(target=thread2, args=(12,))
t1.start()
t2.start()
print("Current thread is: " + threading.current_thread())
t1.join()
t2.join()
當前線程為:
該函數返回當前線程的線程標識符。這是一個非零整數值。如果我們啟動了線程,那麼這個方法將返回它的標識符,否則,它將返回無。
我們可以使用這個方法來索引線程特定數據的字典。當一個線程退出(停止)並創建另一個線程時,可以回收線程標識符。
threading.get_ident()
140578859194112
該方法返回當前活動的所有Thread
對象的列表。該列表包括後台線程(當程序退出時,與之相關的所有後台線程都將自動終止)當前線程創建的虛擬線程對象,以及主線程。
此列表中不存在已終止的線程和尚未啟動的線程。
threading.enumerate()
[ 、、 ]
此方法返回主 Thread
對象。在正常情況下,主線程是啟動 python 解釋器的線程。
threading.main_thread()
該方法用於為使用threading
模塊啟動的所有線程設置跟蹤函數/鉤子。對於每個線程,跟蹤函數被傳遞給sys.settrace()
方法,該方法在調用run()
方法之前被附加到線程。
我們希望作為跟蹤函數的回調函數將接收三個參數:frame
(來自正在運行的代碼的堆棧幀)event
(一個命名通知類型的字元串)和arg
(一個特定於事件的值)
def hello(frame, event, arg):
print("Hello, I am a trace hook.")
threading.settrace(hello)
嘗試更新頂部終端中的代碼。將hello
函數放在主方法和語句threading.settrace(hello)
之外,就在我們為線程調用start
方法的語句之上。
此方法用於為從threading
模塊啟動的所有線程設置配置文件函數。和 trace 函數一樣,profile 函數也傳遞給每個線程的sys.setprofile()
方法,在調用run()
方法之前附加到線程。
threading.setprofile(hello)
此方法返回創建新線程時使用的線程堆棧大小。size
參數是可選的,可用於設置創建後續線程所用的堆棧大小,必須為 0 或正整數(D =默認值為 0)。
如果不支持更改線程堆棧大小,則會引發運行時錯誤。
如果指定的堆棧大小無效,將引發值錯誤。
目前 32 KiB 是支持的最小堆棧大小,為解釋器提供足夠的堆棧空間。
除了上述指定的功能外,threading
模塊還定義了一個常數。如果您指定的超時值大於TIMEOUT_MAX
常量的值,您將得到一個OverflowError
。
除了上面指定的功能之外,threading
模塊還提供了許多類,這些類的對象在創建和管理線程時非常有用。
以下是一些對象類型:
| 目標 | 描述 |
| 線 | 對象,表示單個執行線程。 |
| 鎖 | 原始鎖對象。 |
| 斷續器 | RLock 或可重入鎖對象為單線程提供了獲取(重)已持有鎖(遞歸鎖)的能力。 |
| 情況 | 條件變數對象使一個線程等待,直到另一個線程滿足某個「條件」(如狀態變化或某些數據值) |
| 事件 | 這是條件變數的一個更通用的版本,可以讓許多線程等待某個事件的發生,所有等待的線程只有在事件發生時才會被喚醒。 |
| 旗語 | 當線程塊之間共享的有限資源不可用時,提供一個「計數器」。 |
| 有界符號 | 類似於信號量,但確保它永遠不會超過初始值。 |
| 計時器 | 類似於線程,除了它在運行之前等待一段指定的時間。 |
| 屏障 | 創建一個「屏障」,指定數量的線程必須全部到達該屏障,然後才能繼續運行。 |
上表簡要介紹了 python threading
模塊中的各種對象類型。我們將在接下來的幾個教程中詳細討論所有這些對象。
原創文章,作者:NC7MF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/126699.html