1:基於線程的並行
在 CPython 中,由於存在 全局解釋器鎖,同一時刻只有一個線程可以執行 Python 代碼(雖然某些性能導向的庫可能會去除此限制)。
如果你想讓你的應用更好地利用多核心計算機的計算資源,推薦你使用 multiprocessing 或 concurrent.futures.ProcessPoolExecutor
但是,如果你想要同時運行多個 I/O 密集型任務,則多線程仍然是一個合適的模型
多進程並發適合:I/O 密集型任務
1:threading.
active_count
() 返回當前存活的Thread
對象的數量。 返回值與enumerate()
所返回的列表長度一致
2:threading.
current_thread
() 返回當前對應調用者的控制線程的Thread
對象。如果調用者的控制線程不是利用threading
創建,會返回一個功能受限的虛擬線程對象。
3:threading.
excepthook
(args, /) 處理由Thread.run()
引發的未捕獲異常。
4:threading.
get_ident
() 返回當前線程的 “線程標識符”。它是一個非零的整數,它的值沒有直接含義,主要是用作 magic cookie,
比如作為含有線程相關數據的字典的索引。線程標識符可能會在線程退出,新線程創建時被復用
5:threading.
get_native_id
() 返回內核分配給當前線程的原生集成線程 ID,這是一個非負整數。
它的值可被用來在整個系統中唯一地標識這個特定線程(直到線程終結,在那之后該值可能會被 OS 回收再利用)。
6:threading.
enumerate
() 以列表形式返回當前所有存活的Thread
對象。 該列表包含守護線程,
current_thread(
)當前運行的線程創建的虛擬線程對象和主線程。它不包含已終結的線程和尚未開始的線程
7:threading.
main_thread
() 返回主Thread
對象。一般情況下,主線程是Python解釋器開始時創建的線程(返回主線程)
8:threading.
settrace
(func) 為所有threading
模塊開始的線程設置追蹤函數。在每個線程的run()
方法被調用前,func 會被傳遞給sys.settrace() 性能測試使用使用
9:threading.
setprofile
(func) 為所有threading
模塊開始的線程設置性能測試函數。在每個線程的run()
方法被調用前,func 會被傳遞給sys.setprofile()
10:threading.
stack_size
([size]) 返回創建線程時使用的堆棧大小。可選參數 size 指定之后新建的線程的堆棧大小,
而且一定要是0(根據平台或者默認配置)或者最小是32,768(32KiB)的一個正整數。如果 size 沒有指定,默認是0。
如果不支持改變線程堆棧大小,會拋出RuntimeError
錯誤。如果指定的堆棧大小不合法,會拋出ValueError
錯誤並且不會修改堆棧大小。
32KiB是當前最小的能保證解釋器有足夠堆棧空間的堆棧大小。需要注意的是部分平台對於堆棧大小會有特定的限制,
例如要求大於32KiB的堆棧大小或者需要根據系統內存頁面的整數倍進行分配
應當查閱平台文檔有關詳細信息(4KiB頁面比較普遍,在沒有更具體信息的情況下,建議的方法是使用4096的倍數作為堆棧大小)
11:threading.
TIMEOUT_MAX
阻塞函數(Lock.acquire()
,RLock.acquire()
,Condition.wait()
, ...)中形參timeout 允許的最大值。
傳入超過這個值的 timeout 會拋出OverflowError
異常
print(threading.TIMEOUT_MAX) 4294967.0
最多只允許阻塞這么長時間