python多執行緒中:如何關閉執行緒?

嗨学编程發表於2024-03-13

使用 threading.Event 物件關閉子執行緒

Event 機制工作原理:

Event 是執行緒間通訊的一種方式。其作用相當於1個全域性flag,主執行緒透過控制 event 物件狀態,來協調子執行緒步調。

使用方式

  • 主執行緒建立 event 物件,並將其做為引數傳給子執行緒
  • 主執行緒可以用set()方法將event 物件置為true, 用clear()方法將其置為false。
  • 子執行緒迴圈體內,檢查 event 物件的值,如果為 True, 則退出迴圈。
  • 子執行緒,可使用 event.wait() 將阻塞當前子程序,直至event 物件被置為true.

event 類的常用方法

  • set() 設定 True
  • clear() 設定 False,
  • wait() 使程序等待,直到flag被改為true.
  • is_set() 查詢 event 物件,如被設定為真,則返回True, 否則返回False.
class StartDecisionTread(threading.Thread):
    def __init__(self, ins):
        super(StartDecisionTread, self).__init__()
        self.ins = ins
        self.stop_event = threading.Event()

    def run(self):
        while not self.stop_event.is_set():
            print(1)
            model_file_path = rf'1.db'
            if not os.path.exists(model_file_path): 
                self.stop_event.set()

#Python學習交流群:711312441
thread1 = StartDecisionTread(1)
thread1.start()

子執行緒執行其任務迴圈,它每次迴圈都會檢查event物件,該物件保持 false,就不會觸發執行緒停止。

當主執行緒呼叫event物件的 set() 方法後,在子執行緒迴圈體內,呼叫event物件is_set()方法,發現event 物件為True後, 立即退出任務迴圈,結束執行。

相關文章