Python这门解释性语言也有专门的线程模型,Python虚拟机使用GIL(Global Interpreter Lock,全局解释器锁)来互斥线程对共享资源的访问,但暂时没法利用多处理器的优点。编程
在Python中咱们主要是经过thread和 threading这两个模块来实现的,其中Python的threading模块是对thread作了一些包装的,能够更加方便的被使用,因此咱们使用 threading模块实现多线程编程。这篇文章咱们主要来看看Python对多线程编程的支持。多线程
在语言层面,Python对多线程提供了很好的支持,能够方便地支持建立线程、互斥锁、信号量、同步等特性。下面就是官网上介绍threading模块的基本资料及功能:ide
实现模块函数
thread:多线程的底层支持模块,通常不建议使用;线程
threading:对thread进行了封装,将一些线程的操做对象化。对象
threading模块继承
Thread 线程类,这是咱们用的最多的一个类,你能够指定线程函数执行或者继承自它均可以实现子线程功能;队列
Timer与Thread相似,但要等待一段时间后才开始运行;进程
Lock 锁原语,这个咱们能够对全局变量互斥时使用;事件
RLock 可重入锁,使单线程能够再次得到已经得到的锁;
Condition 条件变量,能让一个线程停下来,等待其余线程知足某个“条件”;
Event 通用的条件变量。多个线程能够等待某个事件发生,在事件发生后,全部的线程都被激活;
Semaphore为等待锁的线程提供一个相似“等候室”的结构;
BoundedSemaphore 与semaphore相似,但不容许超过初始值;
Queue:实现了多生产者(Producer)、多消费者(Consumer)的队列,支持锁原语,可以在多个线程之间提供很好的同步支持。
其中Thread类
是你主要的线程类,能够建立进程实例。该类提供的函数包括:
getName(self) 返回线程的名字
isAlive(self) 布尔标志,表示这个线程是否还在运行中
isDaemon(self) 返回线程的daemon标志
join(self, timeout=None) 程序挂起,直到线程结束,若是给出timeout,则最多阻塞timeout秒
run(self) 定义线程的功能函数
setDaemon(self, daemonic) 把线程的daemon标志设为daemonic
setName(self, name) 设置线程的名字
start(self) 开始线程执行
其中Queue提供的类
Queue队列
LifoQueue后入先出(LIFO)队列
PriorityQueue 优先队列
接下来:
接下来的一系列文章,咱们将会用一个一个示例来展现threading的各个功能,包括但不限于:两种方式起线程、threading.Thread类的重要函数、使用Lock互斥及RLock实现重入锁、使用Condition实现生产者和消费者模型、使用Event和Semaphore多线程通讯。