本文主要是介绍python多线程技术 python-线程的暂停, 恢复, 退出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
由于线程是操作系统直接支持的执行单元,因此,高级语言通常都内置多线程的支持,Python也不例外,并且,Python的线程是真正的Posix Thread,而不是模拟出来的线程。
Python的标准库提供了两个模块:thread
和threading
,thread
是低级模块,threading
是高级模块,对thread
进行了封装。绝大多数情况下,我们只需要使用threading
这个高级模块。
启动一个线程就是把一个函数传入并创建Thread
实例,然后调用start()
开始执行:
import time, threading# 新线程执行的代码:
def loop():print 'thread %s is running...' % threading.current_thread().namen = 0while n < 5:n = n + 1print 'thread %s >>> %s' % (threading.current_thread().name, n)time.sleep(1)print 'thread %s ended.' % threading.current_thread().nameprint 'thread %s is running...' % threading.current_thread().name
t = threading.Thread(target=loop, name='LoopThread')
t.start()
t.join()
print 'thread %s ended.' % threading.current_thread().name
python-线程的暂停, 恢复, 退出
我们都知道python中可以是threading模块实现多线程, 但是模块并没有提供暂停, 恢复和停止线程的方法, 一旦线程对象调用start方法后, 只能等到对应的方法函数运行完毕. 也就是说一旦start后, 线程就属于失控状态. 不过, 我们可以自己实现这些. 一般的方法就是循环地判断一个标志位, 一旦标志位到达到预定的值, 就退出循环. 这样就能做到退出线程了. 但暂停和恢复线程就有点难了, 我一直也不清除有什么好的方法, 直到我看到threading中Event对象的wait方法的描述时.
#!/usr/bin/env python
# coding: utf-8import threading
import timeclass Job(threading.Thread):def __init__(self, *args, **kwargs):super(Job, self).__init__(*args, **kwargs)self.__flag = threading.Event() # 用于暂停线程的标识self.__flag.set() # 设置为Trueself.__running = threading.Event() # 用于停止线程的标识self.__running.set() # 将running设置为Truedef run(self):while self.__running.isSet():self.__flag.wait() # 为True时立即返回, 为False时阻塞直到内部的标识位为True后返回print time.time()time.sleep(1)def pause(self):self.__flag.clear() # 设置为False, 让线程阻塞def resume(self):self.__flag.set() # 设置为True, 让线程停止阻塞def stop(self):self.__flag.set() # 将线程从暂停状态恢复, 如何已经暂停的话self.__running.clear() # 设置为False
这篇关于python多线程技术 python-线程的暂停, 恢复, 退出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!