新聞中心
正如我們在之前的教程中所看到的,threading模塊用于在 python 中創(chuàng)建、控制和管理線程。在本教程中,我們將討論由threading模塊定義的各種函數(shù)和對象類型。

創(chuàng)新互聯(lián)是一家專注于成都做網(wǎng)站、網(wǎng)站設(shè)計(jì)與策劃設(shè)計(jì),郫都網(wǎng)站建設(shè)哪家好?創(chuàng)新互聯(lián)做網(wǎng)站,專注于網(wǎng)站建設(shè)10多年,網(wǎng)設(shè)計(jì)領(lǐng)域的專業(yè)建站公司;建站業(yè)務(wù)涵蓋:郫都等地區(qū)。郫都做網(wǎng)站價格咨詢:028-86922220
threading模塊功能
該模塊提供以下管理線程的功能:
這是上一個教程的代碼片段,我們將使用它來查看threading模塊提供的各種功能。
穿線。active_count()功能
該函數(shù)返回當(dāng)前活動的Thread對象的數(shù)量。
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()活動線程數(shù):3
嘗試在上面的終端中運(yùn)行該代碼。您將看到線程數(shù)為 3 ,因?yàn)槲覀円呀?jīng)創(chuàng)建了 2 個線程,并且在主線程中正在進(jìn)行完整的執(zhí)行。
穿線。current_thread()
該函數(shù)將返回當(dāng)前線程對象,對應(yīng)調(diào)用者的控制線程(當(dāng)前在調(diào)用者的控制中)。如果調(diào)用者的控制線程不是通過線程模塊(例如主線程)創(chuàng)建的,則返回一個功能有限的偽線程對象。
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()當(dāng)前線程為:
穿線。get_ident()
該函數(shù)返回當(dāng)前線程的線程標(biāo)識符。這是一個非零整數(shù)值。如果我們啟動了線程,那么這個方法將返回它的標(biāo)識符,否則,它將返回?zé)o。
我們可以使用這個方法來索引線程特定數(shù)據(jù)的字典。當(dāng)一個線程退出(停止)并創(chuàng)建另一個線程時,可以回收線程標(biāo)識符。
threading.get_ident()140578859194112
穿線。enumerate()
該方法返回當(dāng)前活動的所有Thread對象的列表。該列表包括后臺線程(當(dāng)程序退出時,與之相關(guān)的所有后臺線程都將自動終止)當(dāng)前線程創(chuàng)建的虛擬線程對象,以及主線程。
此列表中不存在已終止的線程和尚未啟動的線程。
threading.enumerate() [ 、、 ]
穿線。main_thread()
此方法返回主 Thread對象。在正常情況下,主線程是啟動 python 解釋器的線程。
threading.main_thread()
穿線。settrace(fun)
該方法用于為使用threading模塊啟動的所有線程設(shè)置跟蹤函數(shù)/鉤子。對于每個線程,跟蹤函數(shù)被傳遞給sys.settrace()方法,該方法在調(diào)用run()方法之前被附加到線程。
我們希望作為跟蹤函數(shù)的回調(diào)函數(shù)將接收三個參數(shù):frame(來自正在運(yùn)行的代碼的堆棧幀)event(一個命名通知類型的字符串)和arg(一個特定于事件的值)
def hello(frame, event, arg):
print("Hello, I am a trace hook.")
threading.settrace(hello) 嘗試更新頂部終端中的代碼。將hello函數(shù)放在主方法和語句threading.settrace(hello)之外,就在我們?yōu)榫€程調(diào)用start方法的語句之上。
穿線。setprofile(fun)
此方法用于為從threading模塊啟動的所有線程設(shè)置配置文件函數(shù)。和 trace 函數(shù)一樣,profile 函數(shù)也傳遞給每個線程的sys.setprofile()方法,在調(diào)用run()方法之前附加到線程。
threading.setprofile(hello)
穿線。stack_size([size])
此方法返回創(chuàng)建新線程時使用的線程堆棧大小。size參數(shù)是可選的,可用于設(shè)置創(chuàng)建后續(xù)線程所用的堆棧大小,必須為 0 或正整數(shù)(D =默認(rèn)值為 0)。
如果不支持更改線程堆棧大小,則會引發(fā)運(yùn)行時錯誤。
如果指定的堆棧大小無效,將引發(fā)值錯誤。
目前 32 KiB 是支持的最小堆棧大小,為解釋器提供足夠的堆??臻g。
穿線。TIMEOUT_MAX
除了上述指定的功能外,threading模塊還定義了一個常數(shù)。如果您指定的超時值大于TIMEOUT_MAX常量的值,您將得到一個OverflowError。
threading模塊對象
除了上面指定的功能之外,threading模塊還提供了許多類,這些類的對象在創(chuàng)建和管理線程時非常有用。
以下是一些對象類型:
| 目標(biāo) | 描述 | | 線 | 對象,表示單個執(zhí)行線程。 | | 鎖 | 原始鎖對象。 | | 斷續(xù)器 | RLock 或可重入鎖對象為單線程提供了獲取(重)已持有鎖(遞歸鎖)的能力。 | | 情況 | 條件變量對象使一個線程等待,直到另一個線程滿足某個“條件”(如狀態(tài)變化或某些數(shù)據(jù)值) | | 事件 | 這是條件變量的一個更通用的版本,可以讓許多線程等待某個事件的發(fā)生,所有等待的線程只有在事件發(fā)生時才會被喚醒。 | | 旗語 | 當(dāng)線程塊之間共享的有限資源不可用時,提供一個“計(jì)數(shù)器”。 | | 有界符號 | 類似于信號量,但確保它永遠(yuǎn)不會超過初始值。 | | 計(jì)時器 | 類似于線程,除了它在運(yùn)行之前等待一段指定的時間。 | | 屏障 | 創(chuàng)建一個“屏障”,指定數(shù)量的線程必須全部到達(dá)該屏障,然后才能繼續(xù)運(yùn)行。 |
上表簡要介紹了 python threading模塊中的各種對象類型。我們將在接下來的幾個教程中詳細(xì)討論所有這些對象。
本文題目:Python中的threading模塊
分享URL:http://m.fisionsoft.com.cn/article/codhssh.html


咨詢
建站咨詢
