執行緒沒有任何方法可用於強制終止或掛起。這是設計上的原因,因為編寫執行緒程式本身十分複雜。例如:如果某個執行緒已經取得了鎖,在它能夠釋放鎖之前強制終止或掛起它,將導致整個應用程式出現死鎖。此外,終止時一般不能簡單的【釋放所有的鎖】,因為複雜的執行緒同步經常涉及鎖定和清楚鎖定操作,而這些操作在執行時的次序要十分精確。
如果要為終止或掛起提供服務,則需要自行建置這些功能。一般的做法是在循環中運行線程,這個循環的作用是定期檢查線程的狀態以決定它是否應該終止。例如: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中文網其他相關文章!