python QT界面关闭线程池的线程跟随退出完美解决方案
作者:柳道 发布时间:2023-01-01 11:56:21
标签: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()结束退出线程
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()
来源:https://www.cnblogs.com/mmld/p/15812996.html


猜你喜欢
- Python爬虫包 BeautifulSoup 递归抓取实例详解概要:爬虫的主要目的就是为了沿着网络抓取需要的内容。它们的本质是
- 1. 使用ssh密钥免密远程登录服务器如果你还未曾成功远程登陆过服务器,下面这篇博客或许对你有帮助如果你成功远程登陆过服务器,Let'
- 这几天不是很忙,就找了些拖动布局方面的资料看看,也学着写了个拖动布局的效果,没想到花了好多时间,七拼八凑,总算是把这个效果写出来了。哎!还是
- 以下是一个基于 Vue 3 实现的简单日历组件的代码示例。这个日历组件包含了前一个月、当前月、下一个月的日期,并且可以支持选择日期、切换月份
- 1.去重示例表内容参考此文章有些 MySQL 数据表中可能存在重复的记录,有些情况我们允许重复数据的存在,但有时候我们也需要删除这些重复的数
- 生成随机密码这件事情用python来干确实相当的方便,优美的string方法加上choice简直是绝配make_password.py###
- SQL SERVER数据库进行备份时出现“操作系统错误5(拒绝访问)。BACKUP DATABASE 正在异常终止。”错误。我们应该如何解决
- Tornado的核心是什么?Tornado 的核心是 ioloop 和 iostream 这两个模块,前者提供了 一个高效的 I/O 事件循
- 经过总结,Python创建多线程主要有如下两种方法:函数类接下来,我们就来揭开多线程的神秘面纱。1. 用函数创建多线程在Python3中,P
- 最近学习了python基础,写一下3大排序练练手:'''Created on 2013-8-23@author: c
- 我们公司网站的项目都是采用utf-8编码格式的,一天,发现部分电脑打开网站的一个页面是空白页,要在IE下重新选择编码才显示正常。我们网站的编
- 省市区县数据来源Google地图. (包括34个省 , 371个市, 2824个县区) /**********创建省级表**********
- 测试通过: ie6 + opera + FF + chrome if (document.all) { window.attachEvent
- 一、在for循环中直接更改列表中元素的值不会起作用:如:l = list(range(10)[::2]) print (l)for n in
- Page Object模式是Selenium中的一种测试设计模式,主要是将每一个页面设计为一个Class,其中包含页面中需要测
- SQL查询中什么时候需要使用表别名?今天写MySQL时遇到使用表别名的问题,这里重新总结一下。1、 表名很长时select * from w
- 一、BLOB字段BLOB是指二进制大对象也就是英文Binary Large Object的所写,而CLOB是指大字符对象也就是英文Chara
- #常用的几个代码--查询临时表空间select name from v$tempfile;--查询表空间select name from v
- 处理数据时我们经常需要从数组中随机抽取元素,这时候我们可以考虑使用np.random.choice()函数语法格式numpy.random.
- Git合并多次提交有时候需要合并几个提交历史记录为一个提交,该怎么办呢?可以使用 git rebase !也可以使用 g