博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python线程专题9:线程终止与挂起、实用工具函数
阅读量:6592 次
发布时间:2019-06-24

本文共 1346 字,大约阅读时间需要 4 分钟。

上一篇文章:
下一篇文章:

线程没有任何方法可用于强制终止或挂起。这是设计上的原因,因为编写线程程序本身十分复杂。例如:如果某个线程已经获取了锁,在它能够释放锁之前强制终止或挂起它,将导致整个应用程序出现死锁。此外,终止时一般不能简单的【释放所有的锁】,因为复杂的线程同步经常涉及锁定和清楚锁定操作,而这些操作在执行时的次序要十分精确。

如果要为终止或挂起提供服务,需要自己构建这些功能。一般的做法是在循环中运行线程,这个循环的作用是定期检查线程的状态以决定它是否应该终止。例如:
from threading import  Thread,Lockclass StoppableThread(Thread):    def __init__(self):        Thread.__init__(self)        self._terminate=False        self._suspend_lock=Lock()    def terminate(self):        self._terminate=True    def suspend(self):        self._suspend_lock.acquire()    def resume(self):        self._suspend_lock.release()    def run(self):        while True:            if self._terminate:                break            self._suspend_lock.acquire()            self._suspend_lock.release()            ...

要记住,要让这种方法可靠的工作,线程应该千万小心不要执行任何类型的阻塞I/O操作。例如,如果线程阻塞等待数据到达,那么它会直到该操作被唤醒时才会终止。因此,你需要在实际中使用超时、非阻塞I/O和其它高级功能,从而确保终止检查执行的频率足够。

实用工具函数

函数名 解释
active_count() 返回当前活动的Thread对象数量。
current_thread() 返回该函数调用者所在的线程的Thread对象。
enumerate() 列出当前所有活动的Thread对象
local() 返回local对象,用于保存线程本地的数据。应该保证此对象在每个线程中是唯一的。
setprofile(func) 设置一个配置文件函数,用于已创建的所有线程。func在每个线程开始运行之前被传递给sys.setprofile()函数。
settrace(func) 设置一个跟踪函数,用于已创建的所有线程。func在每个线程开始运行之前被传递给sys.settrace()函数。
stack_size(size) 返回创建新线程时使用的栈大小。可选的整数参数size表示创建新线程时使用的栈大小。size的值可以是32768(32kb)或更大,而且是4096(4kb)的倍数,这样可移植性更好。如果系统上不支持此操作,将引发ThreadError异常。

转载地址:http://vmcio.baihongyu.com/

你可能感兴趣的文章
我的友情链接
查看>>
Cacti部署SOP
查看>>
Extjs - Panel组件
查看>>
收集参数及反转过程
查看>>
PPTP××× 数据分流
查看>>
mongodb 索引
查看>>
Citrix 宣布 XenServer 全面开源
查看>>
我的友情链接
查看>>
oracle 如果为空则输出0
查看>>
Spfa(最短路求解)
查看>>
使用linux-c编程实现简单的ls命令
查看>>
Q:按F12进行网络安装系统时,一直无法进入,提示加载失败?
查看>>
我的友情链接
查看>>
解决AutoCAD acmgd.dll ARX命令中发现异常
查看>>
[转]passport.js学习笔记
查看>>
10.31T3 其他算法思想
查看>>
day10,11-Python 基本数据类型介绍之数字与字符串(看看就好)
查看>>
JAVA API----Math类和Random类
查看>>
求js数组中最小值
查看>>
UVA10018 Reverse and Add
查看>>