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()
复制代码

 


posted @   柳道  阅读(835)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 三行代码完成国际化适配,妙~啊~
· .NET Core 中如何实现缓存的预热?
点击右上角即可分享
微信分享提示