转载自: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中如何中止一个线程相关推荐

  1. python 强制结束线程_在python中实现强制关闭线程的示例

    Python 如何强制关闭线程过去只可以用来回忆,别沉迷在阴影中,否则永远看不清前面的路. Python用sleep停止一个线程的运行,而不影响主线程的运行,案例代码如下: from threadin ...

  2. 从Python中的另一个文件调用函数

    本文翻译自:Call a function from another file in Python Set_up: I have a .py file for each function I need ...

  3. 浅析Nginx中各种锁实现丨Nginx中手写一个线程池丨Nginx中反向代理,正向代理,负载均衡,静态web服务丨C++后端开发

    学会nginx中锁的使用,让你对锁豁然开朗 1. 反向代理,正向代理,负载均衡,静态web服务 2. nginx 中 accept 锁实现 自旋锁 信号量 3. nginx 中 线程池 实现以及详解虚 ...

  4. Python中如何定义一个函数

    任何编程语言知识它的基础知识都是有些枯燥的,我们一定要多练习, 多实践.下面小编来将一下Python中如何定义一个函数. 最后,如果你的时间不是很紧张,并且又想快速的提高,最重要的是不怕吃苦,建议你可 ...

  5. python的input添加变量_在python中如何定义一个全局变量raw_input() 与 input()的区别...

    raw_input和input两个均是 python 的内建函数,通过读取控制台的输入与用户实现交互.但他们的功能不尽相同.下面举两个例子,来说明两者使用上的不同. 例子1Python 2.7.5 ( ...

  6. Python 中的进程、线程、协程、同步、异步、回调(一)

    在进一步之前,让我们先回顾一下各种上下文切换技术. 不过首先说明一点术语.当我们说"上下文"的时候,指的是程序在执行中的一个状态.通常我们会用调用栈来表示这个状态--栈记载了每个调 ...

  7. python中gil锁和线程锁_Python线程——GIL锁、线程锁(互斥锁)、递归锁(RLock)...

    GIL锁 ​ 计算机有4核,代表着同一时间,可以干4个任务.如果单核cpu的话,我启动10个线程,我看上去也是并发的,因为是执行了上下文的切换,让看上去是并发的.但是单核永远肯定时串行的,它肯定是串行 ...

  8. Python中的进程和线程

    一.Python中两种创建进程的方式 1.os.fork只适用于Linux/Mac 2.使用multiprocessing模块可以跨平台实现多进程 使用os.fork(),像Linux平台上那样创建多 ...

  9. python中gil锁和线程锁_浅谈Python中的全局锁(GIL)问题

    CPU-bound(计算密集型) 和I/O bound(I/O密集型) 计算密集型任务(CPU-bound) 的特点是要进行大量的计算,占据着主要的任务,消耗CPU资源,一直处于满负荷状态.比如复杂的 ...

最新文章

  1. BZOJ 2037 Sue的小球
  2. java同步关键词解释、synchronized、线程锁(Lock)
  3. linux安装mysql不成功怎么处理_Linux上安装MySQL时出现不兼容的解决办法
  4. 孟岩谈Erlang:并行计算和云计算
  5. 8个最高效的Python爬虫框架,你用过几个?
  6. m 文件 dll matlab 中调用_如何在matlab中调用python程序
  7. Intel Haswell/Broadwell架构/微架构/流水线 (5)-高速缓存存储器子系统
  8. firewall cmd mysql_centos的firewall-cmd使用手册
  9. document.ready 与 onload 的区别
  10. 基于粒子群优化算法的移动机器人全局路径规划-附代码
  11. [实践项目]Udacity self-driving-car-sim
  12. 数字电子技术基础(十):SR锁存器
  13. MFC架构下的DirectX8
  14. 2022大厂高频面试题之CSS篇
  15. LIS系统和医院HIS系统的对接方案
  16. 用java设置网页背景图片_JAVA设置背景图片
  17. 无法获得VMCI 驱动程序的版本: 句柄无效。解决方法
  18. 明通智能:EA交易外汇ea能稳定盈利吗?
  19. 点餐系统——数据库设计
  20. 【硬件】【RF 连接器】

热门文章

  1. Swift函数_默认参数
  2. jquery插件---自动补全类插件
  3. (解题思路)Entity Framework 如动态创建表或者列
  4. 同是产品经理,为什么几年后会差距这么大?
  5. 持续更新 | PMCAFF问答专场活动分享笔记大合集
  6. 支付和LBS定位对于O2O到底有多重要?
  7. 网站数据分析:基于用户细分的比较分析
  8. 【干货】如何确定需求优先级,如何确定功能优先级
  9. Lambda and Anonymous Classes
  10. 代表中国为世界做出探索,杭州城市大脑获IDC亚太区智慧城市大奖