使用 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後, 立即退出任務迴圈,結束執行。