Vultr搬瓦工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命令后无法上网的解决方法
  • 下一篇:返回列表
  • 无相关信息
    主机资讯
    主机信息
    Host Gnome英国
    Host Gnome英国
    Sugarhosts
    Sugarhosts
    Vultr
    Vultr
    GT Host
    GT Host
    BandwagonHost搬瓦工
    BandwagonHost搬瓦工
    INCX
    INCX
    Ram Node
    Ram Node
    IO Zoom
    IO Zoom
    推荐信息

    相关文章

    无相关信息

    栏目更新

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