python QT界面關閉線程池的線程跟隨退出完美解決方案
時間:2022-11-30 來源: 作者:柳道 我要糾錯
方法一、線程池執行的循環代碼為自己寫的情況
from concurrent.futures import ThreadPoolExecutor import time a = True # 設置全局變量 def fun(): # 線程池執行的函數 while a: # 線程池中的循環代碼,每次循環都檢查一遍變量a的值 time.sleep( 0.1 ) # 線程需要執行的具體代碼 print ( '1' ) tp = ThreadPoolExecutor( 5 ) # 創建線程池 for i in range ( 10 ): tp.submit(fun) # 向線程池提交任務 time.sleep( 1 ) a = False # 需要結束線程池任務時,執行該代碼 tp.shutdown() # 關閉線程池 |
定義一個全局變量,默認為T,當QT界面關閉后,將該變量值改為F。
線程執行的循環代碼內增加一個判斷方法,每次循環之前對全局變量進行判斷,如果結果為T則進行循環、如果為F,則break退出循環,結束線程
方法二、線程池中執行的循環為調用的模塊內的方法
比如paramiko 庫中,sftp下載文件的方法。
這種情況可以利用回調函數進行判斷。
回調函數檢查控制變量,如果檢測到需要停止執行時,執行sys.exit()結束退出線程
from concurrent.futures import ThreadPoolExecutor import sys import time a = True def call(): # 定義退出的函數 if not a: print ( '線程結束退出' ) sys.exit() # 退出 def fun(callback = None ): # 模擬sftp.get方法,循環執行,并且有回調函數 while True : time.sleep( 0.1 ) print ( '1' ) if callback ! = None : callback() # 每次循環調用回調函數,進行判斷是否需要結束線程 tp = ThreadPoolExecutor( 5 ) for i in range ( 10 ): tp.submit(fun, call) time.sleep( 1 ) a = False tp.shutdown() |
到此這篇關于python QT界面關閉,線程池的線程跟隨退出解決思路方法的文章就介紹到這了