首頁 >後端開發 >Python教學 >Python中執行緒終止與掛起的實作方法

Python中執行緒終止與掛起的實作方法

不言
不言原創
2018-09-11 15:59:425797瀏覽
本篇文章帶給大家的內容是關於Python中線程終止與掛起的實現方法,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助。

執行緒沒有任何方法可用於強制終止或掛起。這是設計上的原因,因為編寫執行緒程式本身十分複雜。例如:如果某個執行緒已經取得了鎖,在它能夠釋放鎖之前強制終止或掛起它,將導致整個應用程式出現死鎖。此外,終止時一般不能簡單的【釋放所有的鎖】,因為複雜的執行緒同步經常涉及鎖定和清楚鎖定操作,而這些操作在執行時的次序要十分精確。

如果要為終止或掛起提供服務,則需要自行建置這些功能。一般的做法是在循環中運行線程,這個循環的作用是定期檢查線程的狀態以決定它是否應該終止。例如:
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和其它高級功能,從而確保終止檢查執行的頻率足夠。

相關推薦:

詳解python中Threadpool執行緒池任務終止範例程式碼

Python中多執行緒thread與threading的實作方法

#

以上是Python中執行緒終止與掛起的實作方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn