python QT界面關閉線程池的線程跟隨退出完美解決方案
時間:2022-11-30 來源: 作者:柳道 我要糾錯
方法一、線程池執行的循環代碼為自己寫的情況
from concurrent.futures import ThreadPoolExecutor import timea = 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 ThreadPoolExecutorimport sysimport timea = Truedef 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 = Falsetp.shutdown() |
到此這篇關于python QT界面關閉,線程池的線程跟隨退出解決思路方法的文章就介紹到這了









