python多线程之 终止子线程
python程序的运行是由一个或者多个进程来进行执行的,但是具体的实现和内存的占用还是由进程内的线程去完成的。简单的说,一个进程由多个线程组成,不同的线程会完成不同的任务。
可以用threading.activeCount()来查看正在运行的线程数量。
终止线程的一些方法:
1、设置一个退出标志flag:
一个比较好用的方式就是在每一个线程后面都加上一个退出的请求标志,表示在执行完成后就自动的退出,不再占用资源和内存。
在线程的run方法中可以根据这个标志位是为true还是为false来判断是否满足终止条件,这种情况多用于while循环中。
Threads = []
# 将会启动与搜索结果等量个线程,线程满足一定条件时则全部线程终止!
for i in range(0,len(self.g_results)):t = threading.Thread(target=self.get_page,args=(i+1,))t.daemon = 1Threads.append(t)
# 启动所有线程
for i in Threads:i.start()
# 当标志位【 flag 】时所有多线程结束
while 1:if self.__flag:break
或者
# 导入线程操作模块threading
import threading
# 定义一个函数在执行完毕后自动退出
def __init__(self):super(this, self).__init__()self._stop_event = threading.Event()
2、使用 stop() 方法强行终止线程
但是不推荐使用这个方法,因为使用此方法不安全,目前该方法已被弃用;
3、使用 interrupt()方法中断线程
断线程时并不会立即终止线程,而是通知目标线程,告诉它有人希望你终止。至于目标线程收到通知后会如何处理,则完全由目标线程自行决定。
4、异常处理停止
在python之中停止一个线程可以raise一个Exception,也就是是异常来停止线程。这个方法的缺点在于如果线程在解释器busy之外,那么就无法捕获异常。应该指定一个异常然后清理就能停止线程了,示例如下:
# 定义一个函数表示线程
def counts(flag):
# 进入函数就强制捕获异常来停止线程if flag:raise ValueError("数据错误")
python多线程之 终止子线程相关推荐
- Python多线程编程之线程子类化
Python多线程编程之线程子类化 基本思路 Threading模块简介 **MyThread**主要代码 实例 所有代码 运行结果 基本思路 导入Threading模块下的Thread类,将其子类化 ...
- 【记录】python多线程的使用 线程同步(LOCK和RLOCK) python与mysql数据库交互实现增加和查找 python的格式化输出
文章目录 多线程: _thread模块 threading模块: 线程同步(LOCK和RLOCK) 和mysql交互: 附:python的格式化输出 附录 多线程: _thread模块 例一 impo ...
- python多线程编程(2): 线程的创建、启动、挂起和退出
From: http://www.cnblogs.com/holbrook/archive/2012/03/02/2376940.html 如上一节,python的threading.Thread类有 ...
- Python多线程-阻塞主线程
写在前面: 前面已经有Scala实现多线程了,那么用Python实现多线程又有什么区别和好处? Scala里实现多线程,启的是同一个Application,计算多线程任务的task都是同时返回到dri ...
- Python多线程之构建线程池
在做爬虫项目时,假设获取一个页面的时间为3秒,一共需要获取10个页面,总时间也就是30秒,但是如果采用线程池,可以把总时间压缩到3秒!因为这10个页面是并行下载的(宏观是并行,微观仍然串行,只是CPU ...
- python多线程编程(8):线程的合并和后台线程
From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2410120.html 线程的合并 python的Thread类中还提供了join( ...
- python—多线程之守护线程
一.守护线程定义: setDaemon: 将线程声明为守护线程,必须在start()方法调用之前设置,如果不设置为守护线程程序会被无限挂起.这个方法基本和join是相反的.当我们在程序运行中,执行一个 ...
- python多线程编程(7):线程间通信
From: http://www.cnblogs.com/holbrook/archive/2012/03/21/2409031.html 很多时候,线程之间会有互相通信的需要.常见的情形是次要线程为 ...
- python多线程的作用_Python多线程中三个函数的强大功能简介
在Python多线程中有三个比较简单的函数,在实际的相关操作中你对这一实际操作是否了解?是否对其感兴趣?如果你想对Python多线程的开发与多线程程序及相关实际操作方案有所了解的话,你就可以点击以下的 ...
最新文章
- 除了腾讯阿里,中国最牛的风投机构,其实是合肥市政府!
- 当前计算机领域中 有关计算机的性能指标,计算机文化基础真题(十七)
- boost::mp11::mp_defer相关用法的测试程序
- Paxos在Chubby中的应用
- POJ 2342 (树形DP)
- Java 反射机制和动态代理是基于什么原理,了解过吗?
- K8S精华问答 | Kubernetes集群不能正常工作,难道是防火墙问题?
- 前端工程师如何摆脱舒适区,持续精进?
- Ubuntu 20 04 提示“检测到系统程序出现问题”
- 物化视图实践(1)----实现远程数据同步
- 处理字典值是把字典放内存还是用sql处理_第二周:MYSQL数据库入门,提升你的数据处理效率...
- Delphi 与 DirectX 之 DelphiX(94): TDIB.DrawAdditive();
- list元素求和_C# lamda =gt;与 数组 list,简单应用
- 【操作系统⑩】——进程死锁【银行家算法+详细样例 进程死锁的预防机制、避免机制、检测与解决】
- <!DOCTYPE>解读
- C++之观察者(Event-Subscriber)模式
- 【漏洞复现-骑士cms-代码执行】vulfocus/骑士cms_cve_2020_35339
- 计算机拓展训练论文,素质拓展训练论文拓展训练论文
- 云南富宁港的建设之路
- MATLAB在安装时需要选择安装的产品
热门文章
- mac打开桌面与屏幕保护程序卡死(解决方案)
- kafka sasl java_Kafka 集群配置SASL+ACL
- nginx日志统计pv、uv命令
- Android使用AIUI快速搭建智能助手
- adm怎么下bt连接_BT宝塔FTP连接不上用不了的解决办法,轻松几步设置即可连接...
- luogu 3373 线段树懒标记维护乘与加
- CE 无法搜索中文字符串变量的解决办法
- 海思芯片中VPSS的group和channel的概念.
- [论]【DSTGCN】Dynamic SpatiotemporalGraph Convolutional Neural Networks for Traffic Data Imputation
- 上汽通用凯迪拉克汽车的多媒体系统不能识别u盘的解决方法