摘要:上一篇文章線程專題使用鎖的注意事項(xiàng)下一篇文章線程專題多線程按順序執(zhí)行線程沒(méi)有任何方法可用于強(qiáng)制終止或掛起。實(shí)用工具函數(shù)函數(shù)名解釋返回當(dāng)前活動(dòng)的對(duì)象數(shù)量。
上一篇文章:Python線程專題8:使用鎖的注意事項(xiàng)
下一篇文章:Python線程專題10:queue、多線程按順序執(zhí)行
線程沒(méi)有任何方法可用于強(qiáng)制終止或掛起。這是設(shè)計(jì)上的原因,因?yàn)榫帉?xiě)線程程序本身十分復(fù)雜。例如:如果某個(gè)線程已經(jīng)獲取了鎖,在它能夠釋放鎖之前強(qiáng)制終止或掛起它,將導(dǎo)致整個(gè)應(yīng)用程序出現(xiàn)死鎖。此外,終止時(shí)一般不能簡(jiǎn)單的【釋放所有的鎖】,因?yàn)閺?fù)雜的線程同步經(jīng)常涉及鎖定和清楚鎖定操作,而這些操作在執(zhí)行時(shí)的次序要十分精確。
如果要為終止或掛起提供服務(wù),需要自己構(gòu)建這些功能。一般的做法是在循環(huán)中運(yùn)行線程,這個(gè)循環(huán)的作用是定期檢查線程的狀態(tài)以決定它是否應(yīng)該終止。例如:
from threading import Thread,Lock class StoppableThread(Thread): def __init__(self): Thread.__init__(self) self._terminate=False self._suspend_lock=Lock() def terminate(self): self._terminate=True def suspend(self): self._suspend_lock.acquire() def resume(self): self._suspend_lock.release() def run(self): while True: if self._terminate: break self._suspend_lock.acquire() self._suspend_lock.release() ...
要記住,要讓這種方法可靠的工作,線程應(yīng)該千萬(wàn)小心不要執(zhí)行任何類型的阻塞I/O操作。例如,如果線程阻塞等待數(shù)據(jù)到達(dá),那么它會(huì)直到該操作被喚醒時(shí)才會(huì)終止。因此,你需要在實(shí)際中使用超時(shí)、非阻塞I/O和其它高級(jí)功能,從而確保終止檢查執(zhí)行的頻率足夠。
實(shí)用工具函數(shù)函數(shù)名 | 解釋 |
---|---|
active_count() | 返回當(dāng)前活動(dòng)的Thread對(duì)象數(shù)量。 |
current_thread() | 返回該函數(shù)調(diào)用者所在的線程的Thread對(duì)象。 |
enumerate() | 列出當(dāng)前所有活動(dòng)的Thread對(duì)象 |
local() | 返回local對(duì)象,用于保存線程本地的數(shù)據(jù)。應(yīng)該保證此對(duì)象在每個(gè)線程中是唯一的。 |
setprofile(func) | 設(shè)置一個(gè)配置文件函數(shù),用于已創(chuàng)建的所有線程。func在每個(gè)線程開(kāi)始運(yùn)行之前被傳遞給sys.setprofile()函數(shù)。 |
settrace(func) | 設(shè)置一個(gè)跟蹤函數(shù),用于已創(chuàng)建的所有線程。func在每個(gè)線程開(kāi)始運(yùn)行之前被傳遞給sys.settrace()函數(shù)。 |
stack_size(size) | 返回創(chuàng)建新線程時(shí)使用的棧大小。可選的整數(shù)參數(shù)size表示創(chuàng)建新線程時(shí)使用的棧大小。size的值可以是32768(32kb)或更大,而且是4096(4kb)的倍數(shù),這樣可移植性更好。如果系統(tǒng)上不支持此操作,將引發(fā)ThreadError異常。 |
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/42416.html
摘要:上一篇文章進(jìn)程專題完結(jié)篇多進(jìn)程處理的一般建議下一篇文章線程專題多線程使用的必要性進(jìn)程線程進(jìn)程能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。由于占用資源少,也使得多線程程序并發(fā)比較高。 上一篇文章:Python進(jìn)程專題完結(jié)篇:多進(jìn)程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進(jìn)程VS線程 進(jìn)程:能夠完成多任務(wù),比如在一個(gè)電腦上可以運(yùn)行多個(gè)軟件。線程:也能夠...
摘要:實(shí)例使用隊(duì)列一般可以簡(jiǎn)化多線程的程序。實(shí)際開(kāi)發(fā)中,此處應(yīng)該使用有用的工作代替完成,指示收到和返回哨兵好帥運(yùn)行結(jié)果好帥多線程按順序執(zhí)行直接看實(shí)例吧,控制多線程的執(zhí)行順序代碼控制多線程的執(zhí)行順序創(chuàng)建實(shí)例,第一個(gè)開(kāi)始不上鎖結(jié)果 上一篇文章:Python線程專題9:線程終止與掛起、實(shí)用工具函數(shù)下一篇文章:敬請(qǐng)期待 queue模塊實(shí)現(xiàn)了各種【多生產(chǎn)者-多消費(fèi)者】隊(duì)列。可用于在執(zhí)行的多個(gè)線程之間安...
摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語(yǔ)時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或相互競(jìng)爭(zhēng)。依賴鎖的代碼應(yīng)該保證當(dāng)出現(xiàn)異常時(shí)可以正常的釋放鎖。 上一篇文章:Python線程專題7:條件變量下一篇文章:Python線程專題9:線程終止與掛起 使用諸如Lock、RLock、Semphore之類的鎖原語(yǔ)時(shí),必須多加小心,鎖的錯(cuò)誤使用很容易導(dǎo)致死鎖或...
摘要:上一篇文章線程專題多線程共享全局變量下一篇文章線程專題對(duì)象對(duì)象對(duì)象對(duì)象類用于表示單獨(dú)的控制線程。線程啟動(dòng)時(shí)將調(diào)用此方法。阻塞線程,等待直到線程終止或者出現(xiàn)超時(shí)為止。當(dāng)不存在任何任何活動(dòng)的非后臺(tái)進(jìn)程時(shí),整個(gè)程序會(huì)退出。 上一篇文章:Python線程專題2:多線程共享全局變量下一篇文章:Python線程專題4:Timer對(duì)象、Lock對(duì)象、Rlock對(duì)象 Thread對(duì)象 Thread類...
摘要:宏任務(wù)需要多次事件循環(huán)才能執(zhí)行完。總結(jié)事件循環(huán)是和事件調(diào)用機(jī)制的核心,保證了頁(yè)面可以有序無(wú)阻塞的進(jìn)行。事件循環(huán)的主要邏輯是先執(zhí)行調(diào)用棧,直到清空調(diào)用棧只剩下全局上下文。微任務(wù)執(zhí)行后完,進(jìn)行頁(yè)面渲染和垃圾回收后進(jìn)行下一輪事件循環(huán)。 準(zhǔn)備知識(shí) 1. 進(jìn)程(process) 進(jìn)程是系統(tǒng)資源分配一個(gè)獨(dú)立單位,一個(gè)程序至少有一個(gè)進(jìn)程。比方說(shuō):一個(gè)工廠代表一個(gè) CPU, 一個(gè)車間就是一個(gè)進(jìn)程,任一...
閱讀 2133·2021-09-06 15:02
閱讀 1752·2021-08-13 15:02
閱讀 2315·2019-08-29 14:14
閱讀 1475·2019-08-26 13:55
閱讀 558·2019-08-26 13:46
閱讀 3411·2019-08-26 11:41
閱讀 529·2019-08-26 10:27
閱讀 3276·2019-08-23 15:28