首 页 10元vpsVultr搬瓦工vps主机商建站程序网站教程国外域名IT资讯

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界面关闭,线程池的线程跟随退出解决思路方法的文章就介绍到这了

无相关信息
主机资讯
主机信息
Simple Machines Forum
Simple Machines Forum
Leaseweb
Leaseweb
ultahost
ultahost
Centmin
Centmin
OpenCart
OpenCart
Shopify
Shopify
Virtualmin开源免费的服务器管理面板
Virtualmin开源免费的服务器管理面板
aaPanel宝塔面板国际版本
aaPanel宝塔面板国际版本

目录网 WPS下载 飞时达国际快递 锁匠汽车电子培训 火币下载

Copyright © 2026 ushost.cn Inc. All Rights Reserved. 美国主机中文网 版权所有
鄂ICP备06013414号-8