這個(gè)類表示在單獨(dú)的控制線程中運(yùn)行的活動(dòng)。有兩種方法可以指定這種活動(dòng),給構(gòu)造函數(shù)傳遞回調(diào)對(duì)象,或者在子類中重寫run() 方法。其他方法(除了構(gòu)造函數(shù))都不應(yīng)在子類中被重寫。換句話說(shuō),在子類中只有__init__()和run()方法被重寫。
一旦線程對(duì)象被創(chuàng)建,它的活動(dòng)需要通過(guò)調(diào)用線程的start()方法來(lái)啟動(dòng)。這方法再調(diào)用控制線程中的run方法。
一旦線程被激活,則這線程被認(rèn)為是'alive'(活動(dòng))。當(dāng)它的run()方法終止時(shí)-正常退出或拋出未處理的異常,則活動(dòng)狀態(tài)停止。isAlive()方法測(cè)試線程是否是活動(dòng)的。
一個(gè)線程能調(diào)用別的線程的join()方法。這將阻塞調(diào)用線程,直到擁有join()方法的線程的調(diào)用終止。
線程有名字。名字能傳給構(gòu)造函數(shù),通過(guò)setName()方法設(shè)置,用getName()方法獲取。
線程能被標(biāo)識(shí)為'daemon thread'(守護(hù)線程).這標(biāo)志的特點(diǎn)是當(dāng)剩下的全是守護(hù)線程時(shí),則Python程序退出。它的初始值繼承于創(chuàng)建線程。這標(biāo)志用setDaemon()方法設(shè)置,用isDaemon()獲取。
存在'main thread'(主線程),它對(duì)應(yīng)于Python程序的初始控制線程。它不是后臺(tái)線程。
有可能存在'dummy thread objects'(啞線程對(duì)象)被創(chuàng)建。這些線程對(duì)應(yīng)于'alien threads'(外部線程),它們?cè)赑ython的線程模型之外被啟動(dòng),像直接從C語(yǔ)言代碼中啟動(dòng)。啞線程對(duì)象只有有限的功能,它們總是被認(rèn)為是活動(dòng)的,守護(hù)線程,不能使用join()方法。它們從不能被刪除,既然它無(wú)法監(jiān)測(cè)到外部線程的中止。
-
class Thread(group=None, target=None, name=None, args=(), kwargs={})
-
構(gòu)造函數(shù)能帶有關(guān)鍵字參數(shù)被調(diào)用。這些參數(shù)是:
group 應(yīng)當(dāng)為 None,為將來(lái)實(shí)現(xiàn)ThreadGroup類的擴(kuò)展而保留。
target 是被 run()方法調(diào)用的回調(diào)對(duì)象. 默認(rèn)應(yīng)為None, 意味著沒(méi)有對(duì)象被調(diào)用。
name 為線程名字。默認(rèn),形式為'Thread-N'的唯一的名字被創(chuàng)建,其中N 是比較小的十進(jìn)制數(shù)。
args是目標(biāo)調(diào)用參數(shù)的tuple,默認(rèn)為()。
kwargs是目標(biāo)調(diào)用的參數(shù)的關(guān)鍵字dictionary,默認(rèn)為{}。
如果子線程重寫了構(gòu)造函數(shù),它應(yīng)保證調(diào)用基類的構(gòu)造函數(shù)(Thread.__init__()),在線程中進(jìn)行其他工作之前。
-
start()
- 啟動(dòng)線程活動(dòng)。
在每個(gè)線程對(duì)象中最多被調(diào)用一次。它安排對(duì)象的run() 被調(diào)用在一單獨(dú)的控制線程中。
-
run()
- 用以表示線程活動(dòng)的方法。
-
你可能在子類重寫這方法。標(biāo)準(zhǔn)的 run()方法調(diào)用作為target傳遞給對(duì)象構(gòu)造函數(shù)的回調(diào)對(duì)象。如果存在參數(shù),一系列關(guān)鍵字參數(shù)從args和kwargs參數(shù)相應(yīng)地起作用。
-
join([timeout])
- 等待至線程中止。這阻塞調(diào)用線程直至線程的join() 方法被調(diào)用中止-正常退出或者拋出未處理的異常-或者是可選的超時(shí)發(fā)生。
-
當(dāng)timeout參數(shù)未被設(shè)置或者不是None
,它應(yīng)當(dāng)是浮點(diǎn)數(shù)指明以秒計(jì)的操作超時(shí)值。因?yàn)?tt>join()總是返回None
,你必須調(diào)用isAlive()來(lái)判別超時(shí)是否發(fā)生。
-
當(dāng)timeout 參數(shù)沒(méi)有被指定或者是None
時(shí),操作將被阻塞直至線程中止。
-
線程能被join()許多次。
-
線程不能調(diào)用自身的join(),因?yàn)檫@將會(huì)引起死鎖。
-
在線程啟動(dòng)之前嘗試調(diào)用join()會(huì)發(fā)生錯(cuò)誤。
-
getName()
- 返回線程名。
-
setName(name)
- 設(shè)置線程名。
-
這名字是只用來(lái)進(jìn)行標(biāo)識(shí)目的的字符串。它沒(méi)有其他作用。多個(gè)線程可以取同一名字。最初的名字通過(guò)構(gòu)造函數(shù)設(shè)置。
-
isAlive()
- 返回線程是否活動(dòng)的。
-
大致上,線程從 start()調(diào)用開(kāi)始那點(diǎn)至它的run()方法中止返回時(shí),都被認(rèn)為是活動(dòng)的。模塊函數(shù)enumerate()返回活動(dòng)線程的列表。
-
isDaemon()
- 返回線程的守護(hù)線程標(biāo)志。
-
setDaemon(daemonic)
- 設(shè)置守護(hù)線程標(biāo)志為布爾值daemonic。它必須在start()調(diào)用之前被調(diào)用。
-
初始值繼承至創(chuàng)建線程。
-
當(dāng)沒(méi)有活動(dòng)的非守護(hù)線程時(shí),整個(gè)Python程序退出。
參見(jiàn):Python Library Reference
posted on 2008-06-24 16:54
len 閱讀(9179)
評(píng)論(0) 編輯 收藏 引用 所屬分類:
程序開(kāi)發(fā)