python QT界面關閉線程池的線程跟隨退出完美解決方案
方法一、線程池執(zhí)行的循環(huán)代碼為自己寫的情況
定義一個全局變量,默認為T,當QT界面關閉后,將該變量值改為F。
線程執(zhí)行的循環(huán)代碼內(nèi)增加一個判斷方法,每次循環(huán)之前對全局變量進行判斷,如果結果為T則進行循環(huán)、如果為F,則break退出循環(huán),結束線程
from concurrent.futures import ThreadPoolExecutor
import time
a = True # 設置全局變量
def fun(): # 線程池執(zhí)行的函數(shù)
while a: # 線程池中的循環(huán)代碼,每次循環(huán)都檢查一遍變量a的值
time.sleep(0.1) # 線程需要執(zhí)行的具體代碼
print('1')
tp = ThreadPoolExecutor(5) # 創(chuàng)建線程池
for i in range(10):
tp.submit(fun) # 向線程池提交任務
time.sleep(1)
a = False # 需要結束線程池任務時,執(zhí)行該代碼
tp.shutdown() # 關閉線程池方法二、線程池中執(zhí)行的循環(huán)為調用的模塊內(nèi)的方法
比如 paramiko 庫中,sftp下載文件的方法。
這種情況可以利用回調函數(shù)進行判斷。
回調函數(shù)檢查控制變量,如果檢測到需要停止執(zhí)行時,執(zhí)行sys.exit()結束退出線程
from concurrent.futures import ThreadPoolExecutor
import sys
import time
a = True
def call(): # 定義退出的函數(shù)
if not a:
print('線程結束退出')
sys.exit() # 退出
def fun(callback=None): # 模擬sftp.get方法,循環(huán)執(zhí)行,并且有回調函數(shù)
while True:
time.sleep(0.1)
print('1')
if callback != None:
callback() # 每次循環(huán)調用回調函數(shù),進行判斷是否需要結束線程
tp = ThreadPoolExecutor(5)
for i in range(10):
tp.submit(fun, call)
time.sleep(1)
a = False
tp.shutdown()到此這篇關于python QT界面關閉,線程池的線程跟隨退出解決思路方法的文章就介紹到這了,更多相關python QT界面關閉內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
OpenCV+Python識別車牌和字符分割的實現(xiàn)
這篇文章主要介紹了OpenCV+Python識別車牌和字符分割的實現(xiàn),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-01-01
老生常談Python startswith()函數(shù)與endswith函數(shù)
下面小編就為大家?guī)硪黄仙U凱ython startswith()函數(shù)與endswith函數(shù)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-09-09
python中使用input()函數(shù)獲取用戶輸入值方式
這篇文章主要介紹了python中使用input()函數(shù)獲取用戶輸入值方式,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2020-05-05

