国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Python線程專題9:線程終止與掛起、實用工具函數

dunizb / 1933人閱讀

摘要:上一篇文章線程專題使用鎖的注意事項下一篇文章線程專題多線程按順序執行線程沒有任何方法可用于強制終止或掛起。實用工具函數函數名解釋返回當前活動的對象數量。

上一篇文章: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進程專題完結篇:多進程處理的一般建議下一篇文章:Python線程專題1:多線程使用的必要性 進程VS線程 進程:能夠完成多任務,比如在一個電腦上可以運行多個軟件。線程:也能夠...

    張紅新 評論0 收藏0
  • Python線程專題10:queue、多線程按順序執行

    摘要:實例使用隊列一般可以簡化多線程的程序。實際開發中,此處應該使用有用的工作代替完成,指示收到和返回哨兵好帥運行結果好帥多線程按順序執行直接看實例吧,控制多線程的執行順序代碼控制多線程的執行順序創建實例,第一個開始不上鎖結果 上一篇文章:Python線程專題9:線程終止與掛起、實用工具函數下一篇文章:敬請期待 queue模塊實現了各種【多生產者-多消費者】隊列。可用于在執行的多個線程之間安...

    scq000 評論0 收藏0
  • Python線程專題8:使用鎖的注意事項

    摘要:上一篇文章線程專題條件變量下一篇文章線程專題線程終止與掛起使用諸如之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或相互競爭。依賴鎖的代碼應該保證當出現異常時可以正常的釋放鎖。 上一篇文章:Python線程專題7:條件變量下一篇文章:Python線程專題9:線程終止與掛起 使用諸如Lock、RLock、Semphore之類的鎖原語時,必須多加小心,鎖的錯誤使用很容易導致死鎖或...

    phoenixsky 評論0 收藏0
  • Python線程專題3:thread對象

    摘要:上一篇文章線程專題多線程共享全局變量下一篇文章線程專題對象對象對象對象類用于表示單獨的控制線程。線程啟動時將調用此方法。阻塞線程,等待直到線程終止或者出現超時為止。當不存在任何任何活動的非后臺進程時,整個程序會退出。 上一篇文章:Python線程專題2:多線程共享全局變量下一篇文章:Python線程專題4:Timer對象、Lock對象、Rlock對象 Thread對象 Thread類...

    EdwardUp 評論0 收藏0
  • JS專題之事件循環

    摘要:宏任務需要多次事件循環才能執行完。總結事件循環是和事件調用機制的核心,保證了頁面可以有序無阻塞的進行。事件循環的主要邏輯是先執行調用棧,直到清空調用棧只剩下全局上下文。微任務執行后完,進行頁面渲染和垃圾回收后進行下一輪事件循環。 準備知識 1. 進程(process) 進程是系統資源分配一個獨立單位,一個程序至少有一個進程。比方說:一個工廠代表一個 CPU, 一個車間就是一個進程,任一...

    mengera88 評論0 收藏0

發表評論

0條評論

最新活動
閱讀需要支付1元查看
<