python中如何中止一个线程
转载自:http://www.708luo.com/?p=30
class KillableThread(threading.Thread):"""A subclass of threading.Thread, with a kill() method."""def __init__(self, *args, **keywords): threading.Thread.__init__(self, *args, **keywords) self.killed = False def start(self):"""Start the thread.""" self.__run_backup = self.run self.run = self.__run # Force the Thread to install our trace. threading.Thread.start(self) def __run(self):""" Hacked run function, which installs the trace.""" sys.settrace(self.globaltrace) self.__run_backup() self.run = self.__run_backup def globaltrace(self, frame, why, arg):if why == 'call':return self.localtraceelse:return None def localtrace(self, frame, why, arg):if self.killed:if why == 'line':raise SystemExit()return self.localtrace def kill(self): self.killed = True
不过这个实现也有一个弊端:如果需要kill的线程正在sleep或者正阻塞在更底层的操作上,是没有办法立即kill掉的。
简单来说,它kill的原理是设置一个flag位,然后线程在执行下一句python语句检测到这个位被设置了之后,就会自行退出,以达到kill的目的。
另外还有一种更容易理解的flag置位的实现方式:
class KillableThread(threading.Thread):def __init__(self): threading.Thread.__init__(self) self.stop = False def run(self):while not self.stop: somefunction()
这种方式相比第一种而言,又有一点不足:kill生效的时限,最大等于somefunction执行一遍所花的时间。
而第一种方式,在下一句python语句执行时就会生效。
不过可以料想,第一种实现方式,整体的执行效率会慢一点。因为每次执行一句python语句,都会有一个判断的过程。
转载于:https://www.cnblogs.com/wujianlundao/archive/2012/03/29/2424203.html
python中如何中止一个线程相关推荐
- python 强制结束线程_在python中实现强制关闭线程的示例
Python 如何强制关闭线程过去只可以用来回忆,别沉迷在阴影中,否则永远看不清前面的路. Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threadin ...
- 从Python中的另一个文件调用函数
本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...
- 浅析Nginx中各种锁实现丨Nginx中手写一个线程池丨Nginx中反向代理,正向代理,负载均衡,静态web服务丨C++后端开发
学会nginx中锁的使用,让你对锁豁然开朗 1. 反向代理,正向代理,负载均衡,静态web服务 2. nginx 中 accept 锁实现 自旋锁 信号量 3. nginx 中 线程池 实现以及详解虚 ...
- Python中如何定义一个函数
任何编程语言知识它的基础知识都是有些枯燥的,我们一定要多练习, 多实践.下面小编来将一下Python中如何定义一个函数. 最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可 ...
- python的input添加变量_在python中如何定义一个全局变量raw_input() 与 input()的区别...
raw_input和input两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互.但他们的功能不尽相同.下面举两个例子,来说明两者使用上的不同. 例子1Python 2.7.5 ( ...
- Python 中的进程、线程、协程、同步、异步、回调(一)
在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...
- python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...
GIL锁 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...
- Python中的进程和线程
一.Python中两种创建进程的方式 1.os.fork只适用于Linux/Mac 2.使用multiprocessing模块可以跨平台实现多进程 使用os.fork(),像Linux平台上那样创建多 ...
- python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题
CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...
最新文章
- BZOJ 2037 Sue的小球
- java同步关键词解释、synchronized、线程锁(Lock)
- linux安装mysql不成功怎么处理_Linux上安装MySQL时出现不兼容的解决办法
- 孟岩谈Erlang:并行计算和云计算
- 8个最高效的Python爬虫框架,你用过几个?
- m 文件 dll matlab 中调用_如何在matlab中调用python程序
- Intel Haswell/Broadwell架构/微架构/流水线 (5)-高速缓存存储器子系统
- firewall cmd mysql_centos的firewall-cmd使用手册
- document.ready 与 onload 的区别
- 基于粒子群优化算法的移动机器人全局路径规划-附代码
- [实践项目]Udacity self-driving-car-sim
- 数字电子技术基础(十):SR锁存器
- MFC架构下的DirectX8
- 2022大厂高频面试题之CSS篇
- LIS系统和医院HIS系统的对接方案
- 用java设置网页背景图片_JAVA设置背景图片
- 无法获得VMCI 驱动程序的版本: 句柄无效。解决方法
- 明通智能:EA交易外汇ea能稳定盈利吗?
- 点餐系统——数据库设计
- 【硬件】【RF 连接器】