python QT界面关闭,线程池的线程跟随退出解决思路方法
方法一、线程池执行的循环代码为自己写的情况
定义一个全局变量,默认为T,当QT界面关闭后,将该变量值改为F。
线程执行的循环代码内增加一个判断方法,每次循环之前对全局变量进行判断,如果结果为T则进行循环、如果为F,则break退出循环,结束线程
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() # 关闭线程池
方法二、线程池中执行的循环为调用的模块内的方法
比如 paramiko 库中,sftp下载文件的方法。
这种情况可以利用回调函数进行判断。
回调函数检查控制变量,如果检测到需要停止执行时,执行sys.exit()结束退出线程
1 from concurrent.futures import ThreadPoolExecutor 2 import sys 3 import time 4 5 a = True 6 def call(): # 定义退出的函数 7 if not a: 8 print('线程结束退出') 9 sys.exit() # 退出 10 11 def fun(callback=None): # 模拟sftp.get方法,循环执行,并且有回调函数 12 while True: 13 time.sleep(0.1) 14 print('1') 15 if callback != None: 16 callback() # 每次循环调用回调函数,进行判断是否需要结束线程 17 18 tp = ThreadPoolExecutor(5) 19 for i in range(10): 20 tp.submit(fun, call) 21 22 time.sleep(1) 23 a = False 24 tp.shutdown()
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?