本文摘自php中文网,作者不言,侵删。
本篇文章给大家带来的内容是关于Python中线程终止与挂起的实现方法,有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助。
线程没有任何方法可用于强制终止或挂起。这是设计上的原因,因为编写线程程序本身十分复杂。例如:如果某个线程已经获取了锁,在它能够释放锁之前强制终止或挂起它,将导致整个应用程序出现死锁。此外,终止时一般不能简单的【释放所有的锁】,因为复杂的线程同步经常涉及锁定和清楚锁定操作,而这些操作在执行时的次序要十分精确。
如果要为终止或挂起提供服务,需要自己构建这些功能。一般的做法是在循环中运行线程,这个循环的作用是定期检查线程的状态以决定它是否应该终止。例如:1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | from threading import Thread,Lock
class 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和其它高级功能,从而确保终止检查执行的频率足够。
阅读剩余部分
相关阅读 >>
windows下Python连接oracle数据库实例方法
当遇到pycharm打开卡死,加载慢的解决方法
用 Python 连接 mysql 的几种方式详解_Python
Python学习之观察者模式
Python播放wav文件(调用系统底层api)的方法
Python中@property装饰器的技巧性用法(代码示例)
Python中应用的小案例分享
Python中tuple指什么
Python+opencv图像风格迁移的实现方法讲解
Python的系统学习实例
更多相关阅读请进入《Python》频道 >>
人民邮电出版社
python入门书籍,非常畅销,超高好评,python官方公认好书。
转载请注明出处:木庄网络博客 » Python中线程终止与挂起的实现方法