標籤:python 程式設計語言
_thread模組是threading模組的基礎模組,為多線程提供了低層級的基元(也稱為輕量級進程或任務)。為了同步,簡單的鎖(也叫做互斥鎖或二元訊號量)被提供。threading模組在該模組的基礎上提供了更易使用並且更進階別的線程API。
該模組支援Windows、Linux、SGI IRIX、Solaris 2.x、以及任何實現了POSIX線程的系統。
_thread模組
它定義了如下的常量和函數:
exception _thread.error
線程錯誤。從3.3版本呢開始相當於RuntimeError。
_thread.LockType
鎖物件類型。
_thread.start_new_thread(function, args[, kwargs])
開始一個新的線程並返回它的標識符。線程使用參數args(必須是一個元組)執行function函數。選擇性參數kwargs制定了一個參數字典。當函數返回時,線程退出。當函數異常終止時,一個棧軌跡被列印然後線程退出(但是其它線程繼續執行)。
_thread.interrupt_main()
在主線程拋出一個KeyboardInterrupt異常。一個子線程能用這個函數中斷主線程。
_thread.exit()
拋出SystemExit異常。如果不被捕獲,將導致線程退出。
_thread.allocate_lock()
返回一個新的鎖對象。鎖的方法在下一節講述。鎖初始處於未鎖狀態。
_thread.get_ident()
返回當前線程的“線程標識符”。這是一個非0整數。它的值沒有直接的含義;他被作為魔法餅乾使用,例如:索引特定線程資料的字典資訊。線程標識符會被迴圈使用。
_thread.stack_size([size])
返回線程棧的大小,當建立新線程的時候使用。選擇性參數size指定接下來建立線程需要的棧大小,必須是0(用平台或者配置預設)或者一個最小32768(32KiB)的正整數,如果改變線程棧大小不被支援,一個RuntimeError異常被拋出;如果指定的棧大小是無效的,一個ValueError被拋出並且棧大小不被修改。32KiB是當前支援的最小的棧大小,為解譯器自身保證足夠的棧空間。注意,一些平台對棧大小的值有特殊的限制,例如要求最小棧大小大於32KiB,或者要求必須分配系統記憶體頁大小的倍數(參考平台文檔,頁大小通常是4KiB)。在以下平台可用:Windows、帶有POSIX線程的系統。
_thread.TIMEOUT_MAX
Lock.acquire()的timeout參數允許的最大值。若指定的值超過該值,則拋出OverflowError。
Lock對象
Lock對象包含下面的方法。
lock.acquire(waitflag=1, timeout=-1)
不帶參數的情況下,該方法無條件地請求鎖,如有必要,線程將等待直到其它線程釋放鎖(一次僅一個線程能擷取鎖)。
如果整數參數waitflag被設定,行為將依賴該參數的值:如果為0,鎖將不等待立即返回,如果為非0,則鎖則無條件地等待。
如果浮點型參數timeout被設定並且大於0,它指定等待的最大秒數。一個負的timeout表示永久等待。如果waitflag為0,你不能指定timeout。
如果鎖擷取成功,則返回True,否則,返回False。
從3.2版開始,acquire能被POSIX的訊號中斷。
lock.release()
釋放鎖,鎖必須先被擷取,但不要求是同一個線程。
lock.locked()
返回鎖的狀態:如果已經被某個線程擷取,則返回True,否則返回False。
對於這些方法,也能通過with語句來使用,例如:
import _threada_lock = _thread.allocate_lock()with a_lock: print("a_lock is locked while this executes")
Python多線程4:_thread