摘要:上一篇文章線程專題使用鎖的注意事項下一篇文章線程專題多線程按順序執行線程沒有任何方法可用于強制終止或掛起。實用工具函數函數名解釋返回當前活動的對象數量。
上一篇文章:Python線程專題8:使用鎖的注意事項
下一篇文章:Python線程專題10:queue、多線程按順序執行
線程沒有任何方法可用于強制終止或掛起。這是設計上的原因,因為編寫線程程序本身十分復雜。例如:如果某個線程已經獲取了鎖,在它能夠釋放鎖之前強制終止或掛起它,將導致整個應用程序出現死鎖。此外,終止時一般不能簡單的【釋放所有的鎖】,因為復雜的線程同步經常涉及鎖定和清楚鎖定操作,而這些操作在執行時的次序要十分精確。
如果要為終止或掛起提供服務,需要自己構建這些功能。一般的做法是在循環中運行線程,這個循環的作用是定期檢查線程的狀態以決定它是否應該終止。例如:
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() ...
要記住,要讓這種方法可靠的工作,線程應該千萬小心不要執行任何類型的阻塞I/O操作。例如,如果線程阻塞等待數據到達,那么它會直到該操作被喚醒時才會終止。因此,你需要在實際中使用超時、非阻塞I/O和其它高級功能,從而確保終止檢查執行的頻率足夠。
實用工具函數函數名 | 解釋 |
---|---|
active_count() | 返回當前活動的Thread對象數量。 |
current_thread() | 返回該函數調用者所在的線程的Thread對象。 |
enumerate() | 列出當前所有活動的Thread對象 |
local() | 返回local對象,用于保存線程本地的數據。應該保證此對象在每個線程中是唯一的。 |
setprofile(func) | 設置一個配置文件函數,用于已創建的所有線程。func在每個線程開始運行之前被傳遞給sys.setprofile()函數。 |
settrace(func) | 設置一個跟蹤函數,用于已創建的所有線程。func在每個線程開始運行之前被傳遞給sys.settrace()函數。 |
stack_size(size) | 返回創建新線程時使用的棧大小。可選的整數參數size表示創建新線程時使用的棧大小。size的值可以是32768(32kb)或更大,而且是4096(4kb)的倍數,這樣可移植性更好。如果系統上不支持此操作,將引發ThreadError異常。 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/42416.html
摘要:上一篇文章進程專題完結篇多進程處理的一般建議下一篇文章線程專題多線程使用的必要性進程線程進程能夠完成多任務,比如在一個電腦上可以運行多個軟件。由于占用資源少,也使得多線程程序并發比較高。 上一篇文章:Python進程專題完結篇:多進程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進程VS線程 進程:能夠完成多任務,比如在一個電腦上可以運行多個軟件。線程:也能夠...
摘要:實例使用隊列一般可以簡化多線程的程序。實際開發中,此處應該使用有用的工作代替完成,指示收到和返回哨兵好帥運行結果好帥多線程按順序執行直接看實例吧,控制多線程的執行順序代碼控制多線程的執行順序創建實例,第一個開始不上鎖結果 上一篇文章:Python線程專題9:線程終止與掛起、實用工具函數下一篇文章:敬請期待 queue模塊實現了各種【多生產者-多消費者】隊列。可用于在執行的多個線程之間安...
摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現異常時可以正常的釋放鎖。 上一篇文章:Python線程專題7:條件變量下一篇文章:Python線程專題9:線程終止與掛起 使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或...
摘要:上一篇文章線程專題多線程共享全局變量下一篇文章線程專題對象對象對象對象類用于表示單獨的控制線程。線程啟動時將調用此方法。阻塞線程,等待直到線程終止或者出現超時為止。當不存在任何任何活動的非后臺進程時,整個程序會退出。 上一篇文章:Python線程專題2:多線程共享全局變量下一篇文章:Python線程專題4:Timer對象、Lock對象、Rlock對象 Thread對象 Thread類...
閱讀 2113·2021-09-06 15:02
閱讀 1740·2021-08-13 15:02
閱讀 2301·2019-08-29 14:14
閱讀 1464·2019-08-26 13:55
閱讀 547·2019-08-26 13:46
閱讀 3401·2019-08-26 11:41
閱讀 508·2019-08-26 10:27
閱讀 3257·2019-08-23 15:28