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

  • 上一篇:Win11使用flushdns命令后无法上网的解决方法
  • 下一篇:解决Python httpx 运行过程中无限阻塞的问题
  • 无相关信息
    主机资讯
    主机信息
    v.ps
    v.ps
    gcore卢森堡
    gcore卢森堡
    PhpBB
    PhpBB
    DokuWiki
    DokuWiki
    MediaWiki
    MediaWiki
    PmWiki
    PmWiki
    MODX
    MODX
    AbanteCart
    AbanteCart
    推荐信息

    相关文章

    无相关信息

    栏目更新

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