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