threading包含对象
Thread : 表示一个线程执行对象
Lock :锁原语对象跟thread模块了的锁对象一样
RLock :可重入锁对象,使单线程可以再次获得已经获得了的锁(递归锁定)
condition:条件变量对象,能让线程停下来,等待其他线程满足了某个条件如状态改变之
event :通用的条件变量,多个线程可以等待某个事件的发生,在事件发生后所有线程会被激活。
seamphore:为等待锁的线程提供一个类似等候室的结构
boundedSeamphore:与semaphore类似,只是它不允许超市过初始值
timer :与Thread类似他要等待一段时间后才开始运行。
需要注意的是thread模块不支持线程守护,当主进程 推出时,线程不论是否还在工作都会直接退出。threading支持线程守护
Thread类
threading的Thread类是你主要的运行对象。他有很多thread模块了没有的函数。
thread创建线程的方法主要如下:
创建一个Thread的实例,传给它一个函数;
创建一个Thread的实例,传给它一个可调用的类对象
从Thread派生出一个子类,创建一个这个子类的实例。
Thread主要包含的函数如下:
start()开始线程的执行
run()定义线程的功能的函数
join(timeout=None)程序挂起,直到线程结束;如果给了timeout,则最多阻塞timeout秒
getName()返回线程名字
setName()设置线程名字
isAlive()布尔标志,表示这个线程是否在运行中
isDacmon()返回线程的daemon标志
setDaemon()把线程daemon标志设置为dacemonic(一定要在调用start()前调用。
代码示例如下:
#!/usr/bin/env python
import threading
from time import sleep, ctime
loops = [4,2]
def loop(nloop, nsec):
print 'start loop',nloop, 'at:',ctime()
sleep(nsec)
print 'loop',nloop, 'done at:', ctime()
def main():
print 'starting at:', ctime()
threads = []
nloops = range(len(loops))
for i in nloops:
t = threading.Thread(target=loop, args=(i,loops[i]))
threads.append(t)
for i in nloops:
threads[i].start()
for i in nloops:
threads[i].join()
print 'all DONE at:',ctime()
if __name__ == '__main__':
main()
运行结果如图